当 class 路径中存在 eclipse moxy jar 时,则不考虑 jersey jackson 提供程序

When eclipse moxy jar is present in class path, then jersey jackson provider is not considered

我们有代码(我的团队无法控制),它使用 JacksonJsonProvider class 来反序列化 REST 响应。但是我观察到的是,当我的 class 路径中存在 eclipse moxy core jar 时,然后当调用 readEntity 方法时,它不会进入 Jackson class 来解组响应,而是进入 Eclipse Unmarshaller .

我因此面临的主要问题是,在我的回复中,我有一个字段 return 来自数据库的日期值(只要),当解组时,该值未设置(null ). DTO class 的字段类型为 java.util.Date.

我有哪些可能的选择?

以下为客户端代码:

ClientConfig clientConfig = new ClientConfig();
GenericType<List<PublicationDTO>> abcd = new GenericType<List<PublicationDTO>>() {};
clientConfig.register(JacksonJsonProvider.class);
clientConfig.register("application/json");

Client _client2 = ClientBuilder.newClient(clientConfig);
WebTarget _webTarget2 = _client2.target("....");
Response resp = _webTarget2.request(MediaType.APPLICATION_JSON_TYPE).get();
List<PublicationDTO> data = resp.readEntity(abcd);
data.forEach(System.out::println);

输出:<除了日期之外的所有东西都有效;日期为空。>

DTO class:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@JsonIgnoreProperties(ignoreUnknown = true)
public class PublicationDTO {
  private Long publicationId;
  
  @XmlSchemaType(name = "date")
  private Date startTime;

  @XmlSchemaType(name = "date")
  private Date endTime;

以下是调用的 classes 的堆栈跟踪,当我在 classpath 中存在 eclipse moxy 核心库时创建 readEntity 时。

以下是没有的时候:

PS:我无法删除 eclipse moxy 核心 jar,因为我的项目需要它来解组一些响应。由于我无法控制的另一个项目因响应而失败。两者都有相同的 class 加载程序来加载他们的 jar 和 classes。 (如果您使用过 SAP Hybris,您就会知道 classloading 是如何工作的)

当我们使用 GlassFish v4 中的 Jersey 时,考虑的默认实现是 Eclipse Link Moxy。如果我们要选择Jackson,那么就用JacksonFeature注册客户端对象。

例如client.register(JacksonFeature.class);