Сериализация даты игнорирует 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));