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

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贡献1590条经验 获得超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

添加回答

举报

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