Сериализация даты игнорирует ContextResolver в запросе REST

У меня есть приложение, основанное на Wildfly 15, которое использует Yasson для сериализации сущностей в REST-запросах. Я использую javaee-api 8.0.1 и создалContextResolverдля настройки формата сериализации даты, как в /questions/48447495/raznoe-povedenie-pri-serializatsii-jax-rs-json-javautildate/48447506#48447506.

@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 ответ

Решение

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

Response response = target.path(REST_SERVICE_NAME)
  .register(JsonbDateConfig.class)
  .request()
  .post(Entity.entity(dataTO, MediaType.APPLICATION_JSON));
Другие вопросы по тегам