Джексон: ошибка десериализации. нет конструктора аргумента String / метода фабрики для десериализации из значения String - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь десериализовать после JSON

{
  "deliverLumpSum": 0.0,
  "faxQId": "{\"type\":\"TAKEAWAY\",\"data\":{\"orderId\":\"AWSWD-AWSAW\",\"orderKey\":\"DERS34S32SD\"}}"
}

с помощью следующего обычного десериализатора

public class OrderIdDeserializer extends JsonDeserializer<OrderId> {

  @Override
  public OrderId deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
      OrderId orderId = jsonParser.readValueAs(OrderId.class);
      return orderId;
  }
}

в следующей объектной структуре

@Data
public class AddInfo {

  protected double deliverLumpSum;

  @JsonDeserialize( using = OrderIdDeserializer.class)
  public OrderId orderId;

}

@Data
public class OrderId {

  private String type;
  private TakeawayData data;

}

@Data
public class TakeawayData {

  private String orderId;
  private String orderKey;

}

и я получил следующую ошибку

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `OrderId` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{"type":"TAKEAWAY","data":{"orderId":"AWSWD-AWSAW","orderKey":"DERS34S32SD"}}')

что я не так и как я могу решить эту проблему?

ТНХ

1 Ответ

0 голосов
/ 31 октября 2018

К десериализации приватных полей, которые вы должны добавить геттер или / и сеттер

Сеттер делает десериализованным только закрытое поле

Или просто обнародовать

 public class OrderId {

    public String type;
    public TakeawayData data;

 }

 public class TakeawayData {

   public String orderId;
   public String orderKey;

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...