jackson设置读取属性时使用大写序列化属性时使用小写

jackson是一种使用广泛的json序列化库,虽然性能上可能不如fastjson,但是从其标准性以及安全性上来看(近一年爆出了不少fastjson的漏洞),下面就介绍下本文的主题,jackson序列化以及反序列化时可能用到的几个注解:

@Getter
@Setter
public class UserInfoDTO {

    @JsonSetter("User")
    private UserInfo user;

    @Getter
    @Setter
    public static class UserInfo{
        @JsonSetter("Id")
        private String id;
        @JsonSetter("UserName")
        private String userName;
        @JsonSetter("RealName")
        private String realName;
        @JsonSetter("PhoneNumber")
        private String phone;
    }
}

为什么会出现上面的情况呢,因为涉及到java与.net应用之间的数据传输,在.net中属性的命名规则是大写,但是在java中属性是遵从驼峰式命名规则的,所以为了能正确解析从.net返回的json数据,我们这里用到了@JsonSetter这个注解,这个注解是用在反序列化阶段的(即将json转换为队形的java对象),另外一个与@JsonSetter注解配对的是@JsonGetter注解,该注解是用来定义json的序列化阶段的,比如返回到前端的属性,由于该例子中java应用返回到前端也是驼峰式命名,所以没使用@JsonGetter注解。

 

PS:

1、我们不仅可以定义属性的大小写,还可以定义属性的名字

2、json的序列化过程用到@JsonGetter注解(此阶段是读取对象属性然后转换成json),,反序列化用到@JsonSetter注解(该过程是读取json然后设置对象属性)

3、如果序列化以及反序列化使用相同的名字,而且与java类属性名不一致的话可以使用@JsonProperty注解

你可能感兴趣的:(spring)