Сериализация LocalDateTime в службе отдыха Spring Boot HATEOAS
Я сталкиваюсь со следующей проблемой: в проекте, использующем Spring Boot, spring-data-jpa и spring-data-rest, для публикации служб отдыха HATEOAS, я хотел бы преобразовать переменную LocalDateTime во что-то вроде "2014-12-20T02:30:00.472"для целей сериализации, то есть я хочу, чтобы ответ, отправленный моему клиенту, всегда содержал этот формат.
Следуя этим и этим предложениям, я использовал эти аннотации в своем классе моделей:
public class Order {
...
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime createdAt;
...
getter and setter
}
и это мой интерфейс репозитория:
@RepositoryRestResource(path = "orders", collectionResourceRel = "orders")
public interface IOrderRepository extends JpaRepository<Order, Long> {
}
У меня также есть контроллер для тестирования этих вещей:
@RestController
public class JavaTimeController {
IOrderRepository repo;
public JavaTimeController(IOrderRepository repo) {
super();
this.repo = repo;
}
@RequestMapping("/dblocaldatetime")
public Order dbLocalDateTime() {
Order order = repo.findOne(1L);
return order;
}
}
Теперь странная вещь:
- если я отправлю запрос по URL-адресу " http://localhost:8080/dblocaldatetime", тогда мой тестовый контроллер получит заказ с id=1, и будет показан правильный формат даты и времени (т. е. "2014-12-20T02:30:00,472"); Стоит заметить, что в этом случае ресурс возвращается в форме "не-HATEOAS", то есть он не имеет украшения "_link" или "_embedded"
- запрашивая остальной URI " http://localhost:8080/orders/1", я получаю ответ HATEOAS, но на этот раз формат datetime выглядит примерно так:
"createdAt" : { "year" : 2010, "month" : "JANUARY", "dayOfMonth" : 1, "dayOfWeek" : "FRIDAY", "dayOfYear" : 1, "monthValue" : 1, "hour" : 2, "minute" : 2, "second" : 0, "nano" : 0, "chronology" : { "id" : "ISO", "calendarType" : "iso8601" } }
Почему это происходит? Я думаю, что что-то происходит в процессе построения ответа HATEOAS, но я не могу продолжить расследование: как я мог? Любая помощь будет оценена.
1 ответ
В конце концов, я обнаружил, в чем проблема: просто проблема с грязным браузером и кешем; по какой-то причине при изменении разных настроек я всегда получал один и тот же результат, и казалось, что с HATEOAS была проблема; Очистка кеша браузера решила проблему.
Следуя предложению @Cepr0, также обнаружил, что достаточно использовать только аннотацию @JsonFormat; поэтому нет необходимости в аннотациях @JsonSerialize(using = LocalDateTimeSerializer.class) и @JsonDeserialize(using = LocalDateTimeDeserializer.class).