-1
Whenever I try to create an itemPedido list and use it in a request mapper, it ends up as id and null product. Already trackei with the Debugger and it does not catch the reference with the idProduct that I put in Postman. I’m new at this and I’m sure I’m missing something.
The process would be: Create an Order that has a list of itemPedido with the attributes Product and quantity. But the Product is null.
Request Class:
@Entity
@AllArgsConstructor
@NoArgsConstructor
public class Pedido {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Valid
    @ManyToOne
    @JoinColumn(name = "id_usuario_solicitante")
    private Usuario solicitante;
    @Valid
    @ManyToOne
    @JoinColumn(name = "id_endereco")
    private Endereco enderecoEntrega;
    @Valid
    @ManyToOne
    @JoinColumn(name = "id_estabelecimento", nullable = false)
    private Estabelecimento estabelecimento;
    @Valid
    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinColumn(name = "id_pedido")
    private List<ItemPedido> itensPedido;
    @Valid
    @Enumerated(EnumType.STRING)
    private FormaPagamento formaPagamento;
    @Enumerated(EnumType.STRING)
    private StatusPedido status;
    @JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime horarioSolicitacao;
    @JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime horarioSaiuParaEntrega;
    @JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime horarioEntrega;
    @JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime horarioCancelamento;
    private BigDecimal valorTotal;
    @Valid
    @ManyToOne
    @JoinColumn(name = "id_entregador")
    private Entregador entregador;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Usuario getSolicitante() {
        return solicitante;
    }
    public void setSolicitante(Usuario solicitante) {
        this.solicitante = solicitante;
    }
    public Endereco getEnderecoEntrega() {
        return enderecoEntrega;
    }
    public void setEnderecoEntrega(Endereco enderecoEntrega) {
        this.enderecoEntrega = enderecoEntrega;
    }
    public Estabelecimento getEstabelecimento() {
        return estabelecimento;
    }
    public void setEstabelecimento(Estabelecimento estabelecimento) {
        this.estabelecimento = estabelecimento;
    }
    public List<ItemPedido> getItensPedido() {
        return itensPedido;
    }
    public void setItensPedido(List<ItemPedido> itensPedido) {
        this.itensPedido = itensPedido;
    }
    public FormaPagamento getFormaPagamento() {
        return formaPagamento;
    }
    public void setFormaPagamento(FormaPagamento formaPagamento) {
        this.formaPagamento = formaPagamento;
    }
    public StatusPedido getStatus() {
        return status;
    }
    public void setStatus(StatusPedido status) {
        this.status = status;
    }
    public LocalDateTime getHorarioSolicitacao() {
        return horarioSolicitacao;
    }
    public void setHorarioSolicitacao(LocalDateTime horarioSolicitacao) {
        this.horarioSolicitacao = horarioSolicitacao;
    }
    public LocalDateTime getHorarioSaiuParaEntrega() {
        return horarioSaiuParaEntrega;
    }
    public void setHorarioSaiuParaEntrega(LocalDateTime horarioSaiuParaEntrega) {
        this.horarioSaiuParaEntrega = horarioSaiuParaEntrega;
    }
    public LocalDateTime getHorarioEntrega() {
        return horarioEntrega;
    }
    public void setHorarioEntrega(LocalDateTime horarioEntrega) {
        this.horarioEntrega = horarioEntrega;
    }
    public LocalDateTime getHorarioCancelamento() {
        return horarioCancelamento;
    }
    public void setHorarioCancelamento(LocalDateTime horarioCancelamento) {
        this.horarioCancelamento = horarioCancelamento;
    }
    public BigDecimal getValorTotal() {
        return valorTotal;
    }
    public void setValorTotal(BigDecimal valorTotal) {
        this.valorTotal = valorTotal;
    }
    public Entregador getEntregador() {
        return entregador;
    }
    public void setEntregador(Entregador entregador) {
        this.entregador = entregador;
    }
}
Itempedido class:
@Entity
public class ItemPedido {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToOne
    @JoinColumn(name = "id_produto")
    private Produto produto;
    private Integer quantidade;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Produto getProduto() {
        return produto;
    }
    public void setProduto(Produto produto) {
        this.produto = produto;
    }
    public Integer getQuantidade() {
        return quantidade;
    }
    public void setQuantidade(Integer quantidade) {
        this.quantidade = quantidade;
    }
}
Class Creatoredorequest:
@Getter
@Setter
@AllArgsConstructor
public class CriarPedidoRequest {
    private Long idPedido;
    private Long idEstabelecimento;
    private Long idUsuarioSolicitante;
    private Long idEnderecoEntrega;
    private List<ItemPedido> itens;
    private FormaPagamento formaPagamento;
    private StatusPedido status;
    private LocalDateTime horarioSolicitacao;
    private LocalDateTime horarioSaiuParaEntrega;
    private LocalDateTime horarioEntrega;
    private LocalDateTime horarioCancelamento;
    private BigDecimal valorTotal;
    private Long idEntregador;
    private Long idProduto;
    private Integer quantidade;
}
Class Creatorservice:
@Service
public class CriarPedidoService {
    @Autowired
    private PedidoRepository pedidoRepository;
    @Autowired
    private CriarPedidoMapper criarPedidoMapper;
    @Autowired
    private ProdutoRepository produtoRepository;
    @Autowired
    private ItemPedidoRepository itemPedidoRepository;
    public Pedido salvarPedido(CriarPedidoRequest request) {
        Pedido pedido = criarPedidoMapper.mapear(request);
        pedido.setStatus(StatusPedido.EM_PREPARO);
        pedido.setHorarioSolicitacao(LocalDateTime.now());
        Produto produto = produtoRepository.findById(request.getIdProduto()).get();
        List<ItemPedido> itens = new ArrayList<>();
        ItemPedido itemPedido = new ItemPedido();
        itemPedido.setProduto(produto);
        itemPedido.setQuantidade(request.getQuantidade());
        itens.add(itemPedido);
        pedido.setItensPedido(itens);
        return pedidoRepository.save(pedido);
    }
}
Criapedidomapper:
@Component
public class CriarPedidoMapper {
    @Autowired
    private UsuarioRepository usuarioRepository;
    @Autowired
    private EnderecoRepository enderecoRepository;
    @Autowired
    private EstabelecimentoRepository estabelecimentoRepository;
    @Autowired
    private EntregadorRepository entregadorRepository;
    @Autowired
    private ProdutoRepository produtoRepository;
    @Autowired
    private ItemPedidoRepository itemPedidoRepository;
    public Pedido mapear(CriarPedidoRequest request) {
        Usuario usuario = usuarioRepository
                .findById(request.getIdUsuarioSolicitante()).get();
        Endereco enderecoEntrega = enderecoRepository
                .findById(request.getIdEnderecoEntrega()).get();
        Estabelecimento estabelecimento = estabelecimentoRepository
                .findById(request.getIdEstabelecimento()).get();
        Entregador entregador = entregadorRepository
                .findById(request.getIdEntregador()).get();
        Produto produto = produtoRepository
                .findById(request.getIdProduto()).get();
        BigDecimal valor = produto.getValor();
        Integer quantidade = request.getQuantidade();
        BigDecimal valorTotal = BigDecimal.valueOf(quantidade).multiply(valor);
        return new Pedido(request.getIdPedido(), usuario, enderecoEntrega, estabelecimento, request.getItens(),
                request.getFormaPagamento(), request.getStatus(), request.getHorarioSolicitacao(),
                request.getHorarioSaiuParaEntrega(), request.getHorarioEntrega(),
                request.getHorarioCancelamento(), valorTotal, entregador);
    }
}
Json:
{
    "idEstabelecimento": 1,
    "idUsuarioSolicitante": 1,
    "idEnderecoEntrega": 1,
    "formaPagamento": "PIX",
    "itens": [
        {
            "idProduto": 1,
            "quantidade": 1
        },
        {
            "idProduto": 2,
            "quantidade": 2
        }
    ]
}