Reputation: 35
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
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