日期序列化忽略 REST 请求中的 ContextResolver
Date serialization ignores ContextResolver in REST request
我有一个基于 Wildfly 15 的应用程序,它使用 Yasson 序列化 REST 请求中的实体。我使用 javaee-api 8.0.1 并创建了一个 ContextResolver
来配置日期序列化格式,如 .
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JsonbDateConfig implements ContextResolver<Jsonb> {
// ...
}
但是,使用以下代码发送REST请求时,配置被忽略(没有触发JsonbDateConfig
方法中的调试断点)。
Response response = target.path(REST_SERVICE_NAME)
.request()
.post(Entity.entity(dataTO, MediaType.APPLICATION_JSON));
因此,生成的 JSON 包含格式不正确的日期值。
我可以创建一个 JsonbAdapter
并将注释 @JsonbTypeAdapter(DateAdapter.class)
添加到类型 java.util.Date
的字段中。但是,我更喜欢适用于所有日期字段的解决方案。 ContextResolver
不起作用的解决方案是什么?
请注意,Wildfly 在启动期间加载了我对 ContextResolver
的实现 class(class 加载断点),并且当我收到传入的 REST 请求时使用此解析器。
由于您使用的是 JAX-RS 客户端,因此您需要向客户端注册提供程序。
Response response = target.path(REST_SERVICE_NAME)
.register(JsonbDateConfig.class)
.request()
.post(Entity.entity(dataTO, MediaType.APPLICATION_JSON));
我有一个基于 Wildfly 15 的应用程序,它使用 Yasson 序列化 REST 请求中的实体。我使用 javaee-api 8.0.1 并创建了一个 ContextResolver
来配置日期序列化格式,如
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JsonbDateConfig implements ContextResolver<Jsonb> {
// ...
}
但是,使用以下代码发送REST请求时,配置被忽略(没有触发JsonbDateConfig
方法中的调试断点)。
Response response = target.path(REST_SERVICE_NAME)
.request()
.post(Entity.entity(dataTO, MediaType.APPLICATION_JSON));
因此,生成的 JSON 包含格式不正确的日期值。
我可以创建一个 JsonbAdapter
并将注释 @JsonbTypeAdapter(DateAdapter.class)
添加到类型 java.util.Date
的字段中。但是,我更喜欢适用于所有日期字段的解决方案。 ContextResolver
不起作用的解决方案是什么?
请注意,Wildfly 在启动期间加载了我对 ContextResolver
的实现 class(class 加载断点),并且当我收到传入的 REST 请求时使用此解析器。
由于您使用的是 JAX-RS 客户端,因此您需要向客户端注册提供程序。
Response response = target.path(REST_SERVICE_NAME)
.register(JsonbDateConfig.class)
.request()
.post(Entity.entity(dataTO, MediaType.APPLICATION_JSON));