Сериализация даты игнорирует ContextResolver в запросе REST - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть приложение на основе Wildfly 15, которое использует Yasson для сериализации объектов в запросах REST. Я использую javaee-api 8.0.1 и создал ContextResolver для настройки формата сериализации даты, как в { ссылка }.

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JsonbDateConfig implements ContextResolver<Jsonb> {
  // ...
}

Однако при отправке запросов REST с использованием В следующем коде конфигурация игнорируется (никакая точка останова отладки в методах JsonbDateConfig не запускается).

Response response = target.path(REST_SERVICE_NAME)
  .request()
  .post(Entity.entity(dataTO, MediaType.APPLICATION_JSON));

Следовательно, результирующий JSON содержит неправильно отформатированное значение даты.

Я мог бы создать JsonbAdapter и добавить аннотацию @JsonbTypeAdapter(DateAdapter.class) в поле типа java.util.Date. Однако я предпочитаю решение, которое применяется ко всем полям даты. Что такое решение, когда ContextResolver не работает?

Обратите внимание, что Wildfly загружает мой класс реализации ContextResolver во время запуска (точка останова загрузки класса), и этот преобразователь используется при получении входящих запросов REST.

1 Ответ

0 голосов
/ 27 апреля 2020

Поскольку вы используете клиент JAX-RS, вам необходимо зарегистрировать провайдера с клиентом.

Response response = target.path(REST_SERVICE_NAME)
  .register(JsonbDateConfig.class)
  .request()
  .post(Entity.entity(dataTO, MediaType.APPLICATION_JSON));
...