1、@JsonProperty注解方式

@JsonProperty注解是annotation包下的一个注解,可以通过value属性定义注解修饰的属性名称,如果你用的是@JsonProperty注解,那么你千万不要用JSONObject.toJSONString(实体)去转json,可能很多人在这里就蒙蔽了,为什么网上复制过来的转换不了,实际上很多文章只是复制粘贴,根本没有实际执行过,JSONObject.toJSONString(实体)实际上是fastjson包里面的方法,他不会处理@JsonProperty上设置的“别名”。正确的写法是:ObjectMapper().writeValueAsString(实体类)。

2、@JSONField注解方式

另外一种方法就是用fastjson包提供的@JSONField(当然这个注解还有很多其他功能,比如格式化时间等,这里不做阐述)。如果用了此注解的属性(或者set方法),那就需要用JSONObject.toJSONString(实体)(或者JSONObject.toJSONString(实体))。

示例

public class SerializeTest {
 
    @JSONField(name = "gender")
    private String sex = "男";
 
    @JsonProperty(value = "name")
    private String userName = "张三";
    
    public String getSex() {
        return sex;
    }
 
    public void setSex(String sex) {
        this.sex = sex;
    }
 
    public String getUserName() {
        return userName;
    }
 
    public void setUserName(String userName) {
        this.userName = userName;
    }
 
    public SerializeTest() {
 
    }
 
    public static void main(String[] args) throws Exception{
        String string = new ObjectMapper().writeValueAsString(new SerializeTest());
        System.out.println(string);
        String jsonString = JSONObject.toJSONString(new SerializeTest());
        System.out.println(jsonString);
    }
}
-----------------------------------------------
-----------------------------------------------
运行结果:
JsonProperty序列化:{"sex":"男","name":"张三"}
JSONField序列化:{"gender":"男","userName":"张三"}

注意:spring框架的@RequestBody默认使用fasterxml中的converter方法将body中的json转换为对象 所以应该使用@JsonProperty注解。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐