JAX-RS JSON(Java.util.date)序列化的不同行为



我正在迁移我的应用程序(JEE7(从wildfly 9.0.1到wildfly 16.0.0。

我注意到两个野生蝇版本的JAX-RS JSON(Java.util.date(的响应。

是更改的错误还是JEE规格?

有没有办法将其用于整个应用程序?

示例类:

@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的响应。

在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;  
    }  
}  

解决了问题。

最新更新