一般做自己的网站需要什么,现在做百度快速收录的方法,河南小学网站建设,安徽省建设工程信网站提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 一个问题#xff1a;后端实体类isXXX开头的属性#xff0c;传到前端后自动去掉is解决方法#xff1a; JsonProperty和JSONField1.简介2.注解的区别2.1 底层框架不… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 一个问题后端实体类isXXX开头的属性传到前端后自动去掉is解决方法 JsonProperty和JSONField1.简介2.注解的区别2.1 底层框架不同2.2 作用域不同2.3 优劣对比 JsonProperty如果使用的是新建的springboot项目默认就是Jackson序列化直接在属性上使用注解即可。 1.依赖2.测试json字符串与bean对象相互转换 JSONField1.依赖2.测试json字符串与bean对象相互转换3.format属性4. serialize属性5.deserialize属性6.ordinal属性7.defaultValue属性8. type属性 一个问题后端实体类isXXX开头的属性传到前端后自动去掉is 解决方法
将生成的isReceipt方法名改成getIsReceipt在生成的get方法上面也就是isReceipt上面加上JsonProperty(value “isXXX”)注解 JsonProperty(value isReceipt)public boolean isReceipt() {return isReceipt;}JsonProperty(value isExamine)public boolean isExamine() {return isExamine;} JsonProperty和JSONField
1.简介
JsonProperty和JSONField注解都是为了解决obj转json字符串的时候将java bean的属性名替换成目标属性名。常见于调用第三方接口的时候属性名不一致的场景。两个注解的作用是相同的只是来源不同使用方式不同。下面将详解其异同
2.注解的区别
2.1 底层框架不同
JsonProperty 是Jackson实现的
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion版本号/version
/dependencyJSONField 是fastjson实现的 dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion版本号/version/dependency
2.2 作用域不同
JSONproperty 注解用于属性上面
如把trueName属性序列化为name可以在属性名上面增加JsonProperty(value“name”)。
JSONField 注解可以用于get、set 以及 属性上面
如把trueName属性序列化为name可以在get/set/属性名上面增加JSONField(value“name”)。
2.3 优劣对比 JSONField注解的使用方式更加简单注解默认的值与属性名相同而JsonProperty需要手动指定属性名 JSONField注解支持更多的属性映射选项例如序列化时的日期格式空值的处理方式等 JSONField注解的性能较快因为fastjson本身就是一款高性能的JSON处理库 在使用Jackson框架时只能使用JsonProperty注解无法使用JSONField注解
JsonProperty 如果使用的是新建的springboot项目默认就是Jackson序列化直接在属性上使用注解即可。 1.依赖
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion版本号/version
/dependencyJsonProperty注解来源于jackson包搭配ObjectMapper().writeValueAsString(实体类)方法使用将实体类转换成json字符串。搭配ObjectMapper().readValue(字符串)方法使用将json字符串转换成实体类。
2.测试json字符串与bean对象相互转换
实体类User.java
import com.fasterxml.jackson.annotation.JsonProperty;Data
NoArgsConstructor
AllArgsConstructor
public class User {JsonProperty(JsonPropertyName)private String name;private String sex;private Integer age;
}
测试方法
Test
public void testJsonProperty() throws IOException{//bean --- jsonUser usernew User(zhangsan,man,22);System.out.println(new ObjectMapper().writeValueAsString(user));//json --- beanString str{\sex\:\man\,\age\:22,\JsonPropertyName\:\zhangsan\};System.out.println(new ObjectMapper().readValue(str, User.class).toString());
}测试结果
{sex:man,age:22,JsonPropertyName:zhangsan}
User [namezhangsan, sexman, age22]可见bean转成json字符串后JsonProperty注解的bean属性名已经替换成了指定属性名JsonPropertyName json字符串转成bean后JsonProperty注解指定的属性名已经替换成了bean属性名name
JSONField
1.依赖
dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion版本号/version
/dependencyJSONField是位于fastjson包里面搭配JSON.toJSONString(实体类)方法使用将实体类转换成json字符串。搭配JSON.parseObject(字符串,实体类.class)方法使用将json字符串转换成实体类。
2.测试json字符串与bean对象相互转换
实体类User.java
import com.alibaba.fastjson.annotation.JSONField;Data
NoArgsConstructor
AllArgsConstructor
public class User {JSONField(nameJSONFieldName)private String name;private String sex;private Integer age;
}测试方法
Test
public void testSONField(){//bean --- jsonUser usernew User(zhangsan,man,22);System.out.println(JSON.toJSONString(user));//json --- beanString str{\JSONFieldName\:\zhangsan\,\age\:22,\sex\:\man\};System.out.println(JSON.parseObject(str, User.class).toString());
}测试结果
{JSONFieldName:zhangsan,age:22,sex:man}
User [namezhangsan, sexman, age22]可见bean转成json字符串后JSONField注解的bean属性名已经替换成了指定属性名JSONFieldNamejson字符串转成bean后JSONField注解指定的属性名已经替换成了bean属性名name测试结果同JsonProperty。
3.format属性
通过format属性可以指定日期类型属性的格式以及将数字类型转为字符串类型的格式
public class User {private String name;private int age;JSONField(format yyyy-MM-dd)private Date birthday;JSONField(format #,###.00)private double salary;
}在上面的例子中使用JSONField注解指定了birthday属性的日期格式为“yyyy-MM-dd”salary属性的数字格式为“#,###.00”
4. serialize属性
通过serialize属性可以控制属性是否序列化到JSON对象中当serialize属性为false时属性将不会序列化到JSON对象中默认为true
public class User {JSONField(serialize false)private int userId;private String name;private int age;
}在上面的例子中使用JSONField注解将userId属性从序列化中排除
5.deserialize属性
通过deserialize属性可以控制是否将JSON对象中的属性反序列化到Java对象中当deserialize属性为false时该属性将不会从JSON对象中反序列化到Java对象中默认为true
public class User {private int userId;private String name;JSONField(deserialize false)private int age;
}在上面的例子中使用JSONField注解将age属性从反序列化中排除
6.ordinal属性
通过ordinal属性可以指定属性的顺序
默认情况下属性的顺序是按照属性在Java对象中的顺序排列的
public class User {JSONField(ordinal 2)private String name;JSONField(ordinal 1)private int age;
}在上面的例子中使用JSONField注解指定了age属性的顺序为1name属性的顺序为2
7.defaultValue属性
通过defaultValue属性可以指定属性在Java对象中的默认值
public class User {JSONField(defaultValue 0)private int userId;JSONField(defaultValue N/A)private String name;private int age;
}在上面的例子中使用JSONField注解指定了userId属性的默认值为0name属性的默认值为“N/A”
8. type属性
通过type属性可以指定属性的类型
public class User {private int userId;JSONField(type FieldType.STRING)private int age;
}在上面的例子中使用JSONField注解指定了age属性的类型为字符串类型