日期序列化忽略 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));