为了账号安全,请及时绑定邮箱和手机立即绑定

Json 到 Java 对象 - 由于字段相同而失败

Json 到 Java 对象 - 由于字段相同而失败

红颜莎娜 2023-01-05 16:50:16
我正在尝试将 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 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我修改了你的代码,试试下面的代码。基本上,我做了以下几件事。

  1. Order 内部没有 Chargeback 对象的 getter 和 setter,所以添加了。

  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"

  }

}


查看完整回答
反对 回复 2023-01-05
  • 1 回答
  • 0 关注
  • 269 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信