Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Bug no List

Olá, quando eu vou tentar cadastrar um item associado ao cliente e os items, fica um loop infinito, ele fica criando items dentro de items, infinitamente. Eu coloquei um @jsonignore, mas quando vou dar um get ele não mostra os items associados ao pedido.

{
        id: 1,
        price_total: 10.00,
        client: {
                // classe client ok
        },
        items: [
                id: 1,
                price_total: 10.00,
                client: {
                        // classe client ok
                },
                items: [
                        id: 1,
                        price_total: 10.00,
                        client: {
                                // classe client ok
                        },
                ]
        ]
}
4 respostas

Oi Pablo,

Qual teste voce esta realizando? Pode postar o codigo completo, pois no curso nao tem geracao de json :D

Opa Rodrigão, eu to mechendo com o spring boot.

aqui e o modelo

@Entity
@Table(name = "TB_ORDER")
@Getter
@Setter
public class OrderModel implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @DecimalMin(value = "0.1", inclusive = false)
    @Digits(integer = 10, fraction = 2)
    @Column(name = "price_total")
    private BigDecimal priceTotal;

    @NotNull
    @ManyToOne
    private UserModel client;

    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
    private List<OrderItensModel> itens = new ArrayList<>();

    private LocalDateTime date = LocalDateTime.now();

    private Integer quantity;

    public OrderModel() {}

    public OrderModel(UserModel client){
        this.client = client;
    }

    public void addItem(OrderItensModel item){
        item.setOrder(this);
        this.itens.add(item);
    }
}

Aqui e o controller

@PostMapping("/save")
    @Transactional
    public ResponseEntity<OrderModel> save(@RequestBody @Valid OrderForm orderForm, UriComponentsBuilder builder){

        UserModel client = orderForm.getClient(userService);
        ProductModel product = orderForm.getProduct(productService);

        OrderModel order = new OrderModel(client);
        OrderItensModel orderItem = new OrderItensModel(1, order, product);
        order.addItem(orderItem);
        order.setPriceTotal(order.getItens().stream().map(OrderItensModel::getPriceUn).reduce(BigDecimal.valueOf(0), BigDecimal::add));

        orderService.save(order);

        URI uri = builder.path("/{id}").buildAndExpand(order.getId()).toUri();
        return ResponseEntity.created(uri).body(order);
    }
solução!

Ah sim, entendi :D

Entao, ai vem aquela questao de ser ruim devolver a entidade no controller, pois esse tipo de problema de serializacao pode acontecer.

O recomendado seria criar um DTO para representar apenas as informacoes que voce deseja retornar na API.

Funcionou, você é o cara mesmo.