juststarted
juststarted

Reputation: 35

RequestDto keep getting Null in Jpa

I'm trying to make invoice in my project.to make it, I need to POST all info that I already put in the DB. I'm trying to use @RequestBody using by requestDto but it keep getting null.

@Data
@Getter
public class InvoiceRequestDto {
    private String note;
    private AddressRequest addressRequest;
    private BuyerRequest buyerRequest;
    private SellerRequest sellerRequest;
    private OrderRequest orderRequest;

other request in InvoiceRequestDto also look like this.

@Data
@Getter
public class BuyerRequest {
    private String companyName;
    private String email;
    private String buyerManager;
    private String buyerManagerNumber;
    private String faxNumber;

this is service, I debugged in here and getting null from all requestDto in InvoiceRequestDto.

    @Transactional
    public Invoice postInvoice(InvoiceRequestDto invoiceRequestDto) {
        try {

            Buyer buyerPost = buyerRepository.findByBuyerManager(invoiceRequestDto.getBuyerRequest().getBuyerManager());
            Seller sellerPost = sellerRepository.findBySellerManager(invoiceRequestDto.getSellerRequest().getSellerManager());
            OrderItem orderPost = orderRepository.getByOrderNumber(invoiceRequestDto.getOrderRequest().getOrderNumber());

            Invoice newInvoice = new Invoice(invoiceRequestDto.getNote(), orderPost, buyerPost, sellerPost);

            Invoice saved = invoiceRepository.save(newInvoice);

            return saved;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    

this is controller.

   @PostMapping("api/order/new")
    public ResponseEntity<Long> postInvoice(@RequestBody InvoiceRequestDto invoiceRequestDto){
        Long result = invoiceService.postInvoice(invoiceRequestDto).getId();
        return ResponseEntity.ok(result);

this is Invoice Entity.

@Getter
@Entity
public class Invoice extends BaseEntity {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "invoice_id")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "buyer_id")
    private Buyer buyer;

    @ManyToOne
    @JoinColumn(name = "seller_id")
    private Seller seller;

    @ManyToOne
    @JoinColumn(name = "product_id")
    private Product product;

    @ManyToOne
    @JoinColumn(name = "delivery_id")
    private Delivery delivery;

    @ManyToOne
    @JoinColumn(name = "orderItem_id")
    private OrderItem orderItem;

    private boolean finalized;

    private String note;
    
    @Builder
    public Invoice(String note, OrderItem orderPost, Buyer buyerPost, Seller sellerPost){
        this.note = note;
        this.orderItem = orderPost;
        this.buyer = buyerPost;
        this.seller = sellerPost;
    }

Upvotes: 0

Views: 91

Answers (1)

isa_toltar
isa_toltar

Reputation: 594

Instead of using external class like this

@Data
@Getter
public class BuyerRequest {
   private String companyName;
   private String email;
   private String buyerManager;
   private String buyerManagerNumber;
   private String faxNumber;

Try to use inner static classes in your InvoiceRequestDto like below and try again.

@Data
@AllArgsConstructor
@NoArgsConstructor
public class InvoiceRequestDto {

  private String note;
  private AddressRequest addressRequest;
  private BuyerRequest buyerRequest;
  private SellerRequest sellerRequest;
  private OrderRequest orderRequest;

  @Data
  @AllArgsConstructor
  @NoArgsConstructor
  public static class AddressRequest {

     // neccessary fields
  }

  @Data
  @AllArgsConstructor
  @NoArgsConstructor
  public static class BuyerRequest {

     // neccessary fields
  }

  @Data
  @AllArgsConstructor
  @NoArgsConstructor
  public static class SellerRequest {

     // neccessary fields
  }

  @Data
  @AllArgsConstructor
  @NoArgsConstructor
  public static class OrderRequest {

     // neccessary fields
  }

}

Upvotes: 1

Related Questions