Kami memiliki kode(tim saya tidak memiliki kendali atas) yang menggunakan kelas JacksonJsonProvider untuk mendeserialisasikan respons REST. Tapi apa yang saya amati adalah ketika saya memiliki Eclipse moxy core jar hadir di classpath saya, kemudian ketika metode readEntity dipanggil, alih-alih masuk ke kelas Jackson untuk menghapus respons, itu masuk ke Eclipse Unmarshaller.

Masalah utama yang saya hadapi karena ini adalah, dalam tanggapan saya, saya memiliki bidang yang mengembalikan nilai tanggal (selama) dari DB, ketika tidak di-marshalled, nilainya tidak disetel (null). Kelas DTO memiliki bidang tipe java.util.Date.

Opsi apa yang mungkin saya miliki?

Berikut adalah kode klien:

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);

Output:

Kelas DTO:

@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;

Berikut ini adalah jejak tumpukan kelas yang dipanggil, ketika saya membuat readEntity ketika Eclipse moxy core lib hadir di classpath.

EclipsereadEntity

Berikut adalah saat tidak:

jacksonStackTrace

PS: Saya tidak dapat menghapus toples inti Eclipse moxy, karena proyek saya membutuhkannya untuk menghapus respons. Karena proyek lain yang tidak saya kendalikan ini gagal dengan responsnya. Keduanya memiliki pemuat kelas yang sama untuk memuat toples dan kelas mereka. (jika Anda telah bekerja di SAP Hybris, Anda tahu cara kerja classloading di sana)

0
NiTiN 10 Juli 2020, 09:45

1 menjawab

Jawaban Terbaik

Saat kami menggunakan Jersey, dari GlassFish v4, implementasi default yang dipertimbangkan adalah Eclipse Link Moxy. Jika kita ingin memilih Jackson, maka daftarkan objek klien dengan JacksonFeature.

Untuk mis.client.register(JacksonFeature.class);

0
NiTiN 12 Juli 2020, 15:47