Можно ли глобально установить формат даты по умолчанию в JSON-B (Yasson) вместо добавления аннотации к каждому свойству?

Я до сих пор использую Джерси, и я делаю свою первую реализацию с JSON-B.

Я использую Payara, поэтому работаю с Джерси и Яссоном. У меня возникла проблема, потому что сериализованные даты всегда будут содержать суффикс "[UTC]".

Мне удалось использовать аннотацию к моему свойству даты в моем DTO. Но я хотел бы настроить это глобально (в конфигурации приложения JAX-RS?), Вместо того, чтобы повторяться в каждом свойстве даты. Это возможно? Пока ничего не нашел...

Дополнительный вопрос: я предполагаю, что можно избавиться от этого суффикса "[UTC]", так как он нарушает работу всех клиентов, пытающихся проанализировать дату. Есть идеи?

1 ответ

Решение

Благодаря этой проблеме с Github я смог решить свою проблему. Вот что я написал в своем коде:

JSONConfigurator.java:

import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
import javax.json.bind.JsonbConfig;
import javax.json.bind.config.PropertyNamingStrategy;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

@Provider
public class JSONConfigurator implements ContextResolver<Jsonb> {

  @Override
  public Jsonb getContext(Class<?> type) {
    JsonbConfig config = getJsonbConfig();
    return JsonbBuilder
      .newBuilder()
      .withConfig(config)
      .build();
  }

  private JsonbConfig getJsonbConfig() {
    return new JsonbConfig()
      .withDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", null);
  }
}

А также:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

@ApplicationPath("/api")    
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new HashSet<Class<?>>();
        addRestResourceClasses(resources);
        resources.add(JSONConfigurator.class);
        return resources;
    }


    private void addRestResourceClasses(Set<Class<?>> resources) {
      ...
    }

}
Другие вопросы по тегам