Автоматическая десериализация вложенного json в POST - Jersery + Jackson - Отсутствует поле индикатора класса из строки базы данных - PullRequest
0 голосов
/ 06 января 2019

У меня есть метод POST, который выглядит примерно так

    POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    @Path("/newJob")
    public JobResponseDTO addNewJob(JobDataDTO jobDataDTO) {

JobDataDTO выглядит так

    public String jobName;

    public JsonNode info;

    public String jobType;

Свойство info содержит вложенный json, который не имеет определенной структуры.

Я использую Джерси и Джексон.

Всякий раз, когда я передаю JSON следующим образом: -

{
    "jobName": "MysqlJob",
    "jobType": "Mysql",
    "info:   : {
      "key"    : "xyz",
      "params" : {
          "resource": "item",
           "request_id": "c0f2befd-540e-44f9-84b5-9094be40b983",
           "date": "2018-11-30 PST;2018-12-16 PST",
        }
    }
}

Я получаю исключения.

avax.servlet.ServletException: javax.servlet.ServletException: Exception [EclipseLink-44] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DescriptorException|Exception Description: Missing class indicator field from database row [org.eclipse.persistence.internal.oxm.record.UnmarshalRecordImpl@1b1bfcec].|Descriptor: XMLDescriptor(com.fasterxml.jackson.databind.JsonNode --> [])

Много застряло на этом.

1 Ответ

0 голосов
/ 01 февраля 2019

Мне удалось заставить его работать следующим образом.

Добавление атрибута @JsonCreator в конструктор JobDataDTO и объявление @JsonProperty в аргументах конструктора.

@JsonCreator
public JobDataDTO(@JsonProperty("info") JsonNode info, String jobName, String jobType)```
...