Я использую зависимость весенней загрузки и hateoas, чтобы показать ссылки на саму сущность. Я звоню родительскому объекту (в данном случае Order Entity) и ожидаю, что он вернет ссылку на себя и дочерний объект (Item и ItemAlternateId). мой код очень прост, но я думаю, что где-то совершаю ошибку, поэтому он не работает
OrderController вызывает функцию all all
@GetMapping("/orders")
public Resources<Resource<Order>> getAllOrders() {
return orderService.all();
}
OrderService all функция получает все заказы из хранилища и вызываетOrderResource Assembler для создания ссылок
public Resources<Resource<Order>> all(){
List<Resource<Order>> orders = orderRepository.findAll().stream()
.map(orderResourceAssembler::toResource)
.collect(Collectors.toList());
return new Resources<>(orders, linkTo(methodOn(OrderService.class).all()).withSelfRel());
}
Order Resource Assembler Class просто создает ссылки и передает их обратно
@Component
public class OrderResourceAssembler implements ResourceAssembler<Order, Resource<Order>> {
@Override
public Resource<Order> toResource(Order order) {
return new Resource<>(order,
linkTo(methodOn(OrderService.class).getOneOrder(order.getId())).withSelfRel(),
linkTo(methodOn(OrderService.class).all()).withRel("orders"));
}
}
Order Entity
@Data
@Entity
@NoArgsConstructor
@Table(name = "order_table")
public class Order {
private @Id
@GeneratedValue
long id;
private String orderId;
private String orderReferenceCode;
private String messageId;
private String messageType;
private String messageCreatedAt; // Date
private String shipToLocationId;
private String shipToAddressName;
private String shipToAddressLine1;
private String shipToAddressLine2;
private String shipToAddressCity;
private String shipToAddressState;
private String shipToAddressPostCode;
private String shipToAddressCountryCode;
private String shipToDeliverAt; // Date
private String shipToDeliverLatestAt; // Date
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "orderedBy")
@JsonManagedReference
private List<Item> items;
}
Item Entity
@Entity
@NoArgsConstructor
@Data
public class Item {
private @Id @GeneratedValue long id;
private String itemId;
private int itemLineId;
private String itemBaseType;
@OneToOne(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
@JsonManagedReference
private ItemAlternateId itemAlternateId;
private String itemDescription;
private String quantityType;
private int quantityOrdered;
private String priceOrderedCurrency;
private double priceOrderedAmount;
private int priceOrderedTaxRate;
@ManyToOne
@JoinColumn(name = "order_id")
@JsonBackReference
private Order orderedBy;
}
Когда я звоню / заказам в почтальоне, я получаю внутреннюю ошибку 500 с сообщением «Сопоставление не должно быть пустым или пустым!»