Json to Java Object - Ошибка из-за идентичных полей - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь преобразовать JSON в Java-объект.Поскольку в json есть одинаковые поля, он выдает ошибку, подобную этой.

com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "amount": 
com.gateway.model.Order#setAmount(1 params) vs com.gateway.model.Order#setAmount(1 params)

Это json (часть, связанная с моей проблемой)

   "order":{  
      "amount":1.000,
      "chargeback":{  
         "amount":0,
         "currency":"BHD"
      },
   }

Это соответствующая частькласса java.

public class Order
{

    private double amount;
    Chargeback ChargebackObject;

    // Getter Methods

    public double getAmount()
    {
        return amount;


    // Setter Methods
    public void setAmount(double amount)
    {
        this.amount = amount;
    }
}

class Chargeback
{
    private double amount;
    private String currency;

    // Getter Methods
    @JsonIgnore
    public double getAmount()
    {
        return amount;
    }

    @JsonInclude(Include.NON_NULL)
    public String getCurrency()
    {
        return currency;
    }

    // Setter Methods 

    public void setAmount(double cb_amount)
    {
        this.amount = cb_amount;
    }

    public void setCurrency(String currency)
    {
        this.currency = currency;
    }  
}

Обратите внимание, что класс Chargeback находится в файле Order.java.

Я пробовал аннотацию @JsonIgnore и удаление amount в chargebackкласс, но все же ошибка существует.Может ли кто-нибудь предложить решение для этого?

1 Ответ

1 голос
/ 06 июня 2019

Я изменил ваш код, попробуйте код ниже. По сути, я сделал следующее.

  1. Внутри Order не было метода получения и установки объекта Chargeback, поэтому он был добавлен.
  2. Закомментированы аннотации @JsonIgnore.

Классификация приведена ниже

class Chargeback {
      private double amount;
      private String currency;

      // Getter Methods
    //  @JsonIgnore
      public double getAmount() {
        return amount;
      }

    //  @JsonInclude(Include.NON_NULL)
      public String getCurrency() {
        return currency;
      }

      // Setter Methods

      public void setAmount(double cb_amount) {
        this.amount = cb_amount;
      }

      public void setCurrency(String currency) {
        this.currency = currency;
      }
    }

    public class Order {
      private double amount;
      Chargeback ChargebackObject;

      public double getAmount() {
        return amount;
      }

      public void setAmount(double amount) {
        this.amount = amount;
      }

      public Chargeback getChargebackObject() {
        return ChargebackObject;
      }

      public void setChargebackObject(Chargeback chargebackObject) {
        ChargebackObject = chargebackObject;
      }
    }

Код для тестирования для генерации Json приведен ниже.

public class Test1 {
  public static void main(String[] args) throws Exception {

    Chargeback chargeback = new Chargeback();
    chargeback.setAmount(1234.00);
    chargeback.setCurrency("BHD");
    Order order = new Order();
    order.setAmount(2345.00);
    order.setChargebackObject(chargeback);

    ObjectMapper mapper = new ObjectMapper();
    String toJson = null;
    try {
      toJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(order);
    } catch (IOException e) {
      e.printStackTrace();
    }
    System.out.println("Complete Json = " + toJson);

// From Json String to Java Object
ObjectMapper mapper1 = new ObjectMapper();
Order order1 = mapper.readValue(toJson, Order.class);
System.out.println("Order Object -> " + order1);
  }
}

Генерация JSON приведена ниже.

{
  "amount" : 2345.0,
  "chargebackObject" : {
    "amount" : 1234.0,
    "currency" : "BHD"
  }
}
...