Разное поведение при сериализации JAX-RS json (java.util.Date) - PullRequest
0 голосов
/ 22 мая 2019

Я переношу свое приложение (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 Ответ

1 голос
/ 25 мая 2019

Решение найдено в 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;  
    }  
}  

И это решило проблему.

...