Разное поведение при сериализации JAX-RS json (java.util.Date)
Я перевожу свое приложение (Jee7) из Wildfly 9.0.1 в Wildfly 16.0.0.
Я заметил разные отклики от десериализации JAX-RS json (java.util.Date) на обеих версиях wildfly.
Это ошибка или спецификация Джи изменилась?
Есть ли способ глобально исправить это для всего приложения?
Примеры классов:
@ApplicationPath("/rest")
public class RestConfig extends Application {
}
@Path("/test")
public class TestResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public TestEntity get() {
return new TestEntity(new Date());
}
}
public class TestEntity {
private Date dtTest;
/* other fields */
public TestEntity(Date dtTest) {
super();
this.dtTest = dtTest;
}
public Date getDtTest() {
return dtTest;
}
}
Wildfly 9.0.1 Ответ: {"dtTest": 1558550586974}
Wildfly 16.0.0 Ответ: {"dtTest":"2019-05-22T18:44:47.268Z[UTC]"}
Я хотел бы получить 1558550586974 для "dtTest" в ответ от Wildfly 16.
1 ответ
Решение
Решение найдено по адресу https://developer.jboss.org/thread/279220.
Я изменил зависимость pom.xml с Jee7 на Jee8:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0</version>
<scope>provided</scope>
</dependency>
Я создал провайдера, реализующего ContextResolver
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
import javax.json.bind.JsonbConfig;
import javax.json.bind.annotation.JsonbDateFormat;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JsonbDateConfig implements ContextResolver<Jsonb> {
private final Jsonb jsonB;
public JsonbDateConfig()
{
JsonbConfig config = new JsonbConfig();
config.setProperty(JsonbConfig.DATE_FORMAT, JsonbDateFormat.TIME_IN_MILLIS);
jsonB = JsonbBuilder.create(config);
}
@Override
public Jsonb getContext(Class objectType) {
return jsonB;
}
}
И это решило проблему.