通过Jackson / Spring将JSON转换为Java POJO的类型处理

时间:2016-07-26 22:41:51

标签: json spring jackson

我正在使用

Spring 3.1.0.RELEASE

Jackson 1.9.5

我正在使用org.springframework.web.client.RestTemplate的getForObject()方法:

getForObject(String url, Class<?> responseType, Map<String, ?> urlVariables) throws RestClientException

这是我的JSON:

{
   "someObject":    {
      "someKey": 42,
   },
   "key2": "valueA"
}

以下是用于持有它的POJO:

SomeClass.java:

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
    "someObject",
    "key2"
})

public class SomeClass {

    @JsonProperty("someObject")
    private SomeObject someObject;
    @JsonProperty("key2")
    private String key2;

    @JsonProperty("someObject")
    public LocationInfo getSomeObject() {
        return someObject;
    }

    @JsonProperty("someObject")
    public void setLocationInfo(SomeObject someObject) {
        this.someObject = someObject;
    }   
}

SomeObject.java:

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
    "someKey"
})

public class SomeObject{

    @JsonProperty("someKey")
    private String someKey;

    @JsonProperty("someKey")
    public String getSomeKey() {
        if(someKey==null){
            someKey = "";
        }
        return someKey.toUpperCase();
    }

    @JsonProperty("someKey")
    public void setSomeKey(String someKey) {
        this.someKey = someKey;
    }

}

有效。给定JSON结构,我得到一个&#34; 42&#34;的字符串值。在类SomeObject的属性someKey

我不明白为什么。在我不知道的幕后会有一些神奇的转变吗?

转换可以依靠吗?此外,我目前没有在String someKey的开头或结尾处获得任何空格。这是我可以依赖的东西,因为整数值不能有任何空格吗?

1 个答案:

答案 0 :(得分:1)

如果您想真正了解其工作原理,请查看https://github.com/joelittlejohn/jsonschema2pojo处的代码。

是的,转换可以依靠,是的,你可以指望它们不是pojo中字符串中的空格。

简而言之,读入JSON文件中的字段,然后将这些字段映射到作为responseType传入的Pojos的成员变量/ setter方法。