JSON序列化对象时,属性首字母要求大写

项目中碰到了在 JSON序列化对象时,属性首字母要求大写的问题,收集了几种解决方法,记录一下
涉及到的JSON版本: jackson:1.9.12,fastjson:1.2.7
Bean对象User,有两个属性:name和sex
public class User {
     private String name;
     private String age;

     public String getName() {
         return name;
     }
     public void setName(String name) {
         name= name;
     }
     public String getAge() {
         return age;
     }
     public void setAge(String age) {
         age= age;
     }
}

@Test
public void json() {
        User user = new User();
        user.setName("name");
        user.setAge("13");
        String str = JSON.toJSONString(user);
        System.out.println(str.toString());
}


1、属性设为public,不需要对应的getXxx()方法
如:
public String name;
public String age;
序列化 结果为: {"Age":"13","Name":"name"}

注:
1)如果加上getXxx()方法,字段和getter方法都解析了,序列化的结果为:{"Age":"13","Name":"name","age":"13","name":"name"}
为避免输出两套内容,可以在类上加注解:@JsonAutoDetect(JsonMethod.FIELD) ,制定只解析字段名,忽略方法
2)@JsonAutoDetect引入的是jackson的方法,对应的序列化也要使用jackson的方法
ObjectMapper mapper = new ObjectMapper();
String str = mapper.writeValueAsString(user);

2、 属性上加注解 @JSONField( name  = "Xxx")
如:
    @JSONField(name = "NNN")
    private String name;
    @JSONField(name = "AAA")
    private String age;
序列化结果: {"AAA":"13","NNN":"name"}

注:此方法中,如果属性首字母为大写,即private String Name;  将不会生效

3) @JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY, getterVisibility=JsonAutoDetect.Visibility.NONE)
类上加注解,使用jackson提供的API序列化对象,得到的结果:{"Age":"13","Name":"name"}

4)网上还有说在初始化 fastJson的时候给TypeUtils.compatibleWithJavaBean赋值为true,此方法还没试过



你可能感兴趣的:(Java)