Имеется объект с определенным набором полей c
@JsonView
:
public class OrderDto extends AbstractDto<OrderDto> {
@Valid
private UserDto user;
@Valid
private GiftCertificateDto giftCertificate;
@JsonView(View.FindOrderForUser.class)
private BigDecimal price;
@JsonView(View.FindOrderForUser.class)
private LocalDateTime purchaseDate;
}
Почему при возвращении данного объекта
OrderDto
в контроллере вместе с ссылками
HATEOAS
в ответ я получаю пустоту:
@GetMapping(UrlMapping.ORDER_USER)
@JsonView(View.FindOrderForUser.class)
public EntityModel<OrderDto> findOrderForUser(@PathVariable long userId, @PathVariable long orderId) {
OrderDto orderDto = orderService.findOrderForUser(orderId, userId);
return EntityModel.of(orderDto);
}
Результат:
{}
Но если я возвращаю простой объект
OrderDto
, то всё работает и отображаются только помеченный аннотацией
@JsonView
поля:
@GetMapping(UrlMapping.ORDER_USER)
@JsonView(View.FindOrderForUser.class)
public OrderDto findOrderForUser(@PathVariable long userId, @PathVariable long orderId) {
return orderService.findOrderForUser(orderId, userId);
}
Результат:
{
"createDate": "2021-06-25T21:38:01",
"lastUpdateDate": "2021-05-21T17:19:06"
}
Но в этом случае нужно, чтобы присутствовали
HATEOAS
ссылки и результат был таким:
{
"price": 1.00,
"purchaseDate": "2021-11-15T10:38:45.193",
"_links": {
"self": {
"href": "http://localhost:8080/orders/1"
}
}
Также в application.properties я задавал свойство spring.jackson.mapper.default-view-inclusion=true, но метод контроллера, в такой ситуации, возвращал все поля объекта OrderDto.
@JsonIgnore
- не решение, т.к. иногда мне нужно выводить в виде JSON все поля объекта OrderDto, а в некоторых ситуациях, как эта, не все поля.