Json响应值未设置为Bean类

时间:2016-07-13 14:29:49

标签: java json spring rest resttemplate

当我上课休息时,我收到了以下回复。

响应:

     {
            "_index": "a_index",
"total":9,
            "_type": "e",
            "_id": "BSKnamtd_8-egMNvh",
            "_data": 2.076404564,
            "_secure": {
              "email": "abcd1@gmail.com"
            }
          }

设置此响应。我已经创建了pojo类,如图所示。

public class data implements Serializable {

    private static final long serialVersionUID = 644188100766481108L;
    private String _index;
    private Integer total;
    private String _type;
    private String _id;
    private Double _data;
    private Source _secure;

    public String getIndex() {
        return _index;
    }

    public void setIndex(String _index) {
        this._index = _index;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public String getType() {
        return _type;
    }

    public void setType(String _type) {
        this._type = _type;
    }

    public String getId() {
        return _id;
    }

    public void setId(String _id) {
        this._id = _id;
    }

    public Double getData() {
        return _data;
    }

    public void setData(Double _data) {
        this._data = _data;
    }

    public Source getSecure() {
        return _secure;
    }

    public void setSecure(Source _secure) {
        this._secure = _secure;

    }

}

当我点击restClient调用时,我只获得“total”值剩余值为null。没有下划线(“”)剩余变量的“total”变量有“”,所以我面临问题..?

请帮助解决此问题。

2 个答案:

答案 0 :(得分:0)

Json对象是

...
"_index": "a_index",
"total":9,
...

这两个属性的属性是:

 public void setIndex(String _index) {
        this._index = _index;
    }

public void setTotal(Integer total) {
        this.total = total;
    }

如您所见, Json _index属性 java属性 index(setIndex)

索引 _index 不同,因此当映射Json对象时,它会变为null,因为它无法找到属性_index。

另一方面, Json总属性 java属性 total(setTotal)

在这种情况下,Json和Java中的属性具有相同的名称,因此它会加载值。

答案 1 :(得分:0)

Java类属性名对于对象映射器是不可见的(它是private)。在您的情况下重要的是getter / setter名称。它用于将JSON对象属性名称映射到Java类(POJO)。

你有两个我能想到的选择。脏的只是将setter名称更改为set_index ()set_type()等,以便它们对应于JSON属性名称,或者您可以正确执行:

  1. 将Java类属性和方法的名称更改为标准约定,以便代码很好并且可以读取。
  2. 使用@JsonProperty注释属性以表示JSON和Java对象之间的默认映射。
  3. 从注释类型JsonProperty Java docs:

      

    默认值("")表示字段名称用作   属性名称没有任何修改,但可以指定   非空值指定不同的名称。属性名称是指   外部使用的名称,作为JSON对象中的字段名称。

    带注释的示例:

    public class test {
    
        @JsonProperty("_index")
        private String index;
    
        private Integer total;
    
        @JsonProperty("_type")
        private String type;
    
        public String getIndex() { return index; }
        public void setIndex(String index){ this.index = index; }
    
        public Integer getTotal() { ... }
        public void setTotal(Integer total) { ... }
    
        public String getType() { ... }
        public void setType(String type) { ... }
        ....
    }