Отображение не должно быть нулевым или пустым! Пружинные сапоги hateoas spring - PullRequest
0 голосов
/ 06 октября 2019

Я использую зависимость весенней загрузки и 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 с сообщением «Сопоставление не должно быть пустым или пустым!»

...