java - JAX-RS json (java.util.Date) 序列化的不同行为
问题描述
我正在将我的应用程序 (Jee7) 从 Wildfly 9.0.1 迁移到 Wildfly 16.0.0。
我注意到两个 Wildfly 版本的 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;
}
}
这解决了问题。
推荐阅读
- python - Try-Except:如何检查 bool(true/false) 作为异常
- php - WordPress 管理页面显示空白
- javascript - 使用javascript查找-7和-12之间的随机数
- amazon-web-services - 允许 IAM 用户访问 API Gateway 在另一个账户上执行 API
- reactjs - 子域不呈现反应应用程序
- javascript - 将多个复选框值传递给 JavaScript 中的函数时出错
- javascript - 如何使用 JavaScript 使我的网站显示输入不能为空?
- python - Pandas:Groupby 并使用剩余的列名和值创建字典
- reactjs - ReactJS - 第一个入口点
- python - 保存到 Parquet 会在 Dask.dataframe 中引发错误