日期序列化忽略REST请求中的ContextResolver。

问题描述 投票:0回答:1

我有一个基于Wildfly 15的应用程序,它使用Yasson在REST请求中序列化实体。我使用javaee-api 8.0.1,并创建了一个名为 ContextResolver 用于配置日期序列化格式,如在 https:/stackoverflow.coma56300246584532。.

@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 在启动期间(类加载断点),当我收到传入的 REST 请求时,会使用这个解析器。

json jax-rs wildfly jsonb yasson
1个回答
0
投票

由于你使用的是JAX-RS客户端,你需要在客户端注册提供者。

Response response = target.path(REST_SERVICE_NAME)
  .register(JsonbDateConfig.class)
  .request()
  .post(Entity.entity(dataTO, MediaType.APPLICATION_JSON));
© www.soinside.com 2019 - 2024. All rights reserved.