2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@JsonProperty(value = "isReceipt")
public boolean isReceipt() {
return isReceipt;
}
@JsonProperty(value = "isExamine")
public boolean isExamine() {
return isExamine;
}
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>版本号</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>版本号</version>
</dependency>
@JSONproperty 注解用于属性上面
@JSONField 注解可以用于get、set 以及 属性上面
@JSONField注解的使用方式更加简单,注解默认的值与属性名相同,而@JsonProperty需要手动指定属性名
@JSONField注解支持更多的属性映射选项,例如序列化时的日期格式,空值的处理方式等
@JSONField注解的性能较快,因为fastjson本身就是一款高性能的JSON处理库
在使用Jackson框架时,只能使用@JsonProperty注解,无法使用@JSONField注解
如果使用的是新建的springboot项目,默认就是Jackson序列化,直接在属性上使用注解即可。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>版本号</version>
</dependency>
实体类: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 ---> json
User user=new User("zhangsan","man",22);
System.out.println(new ObjectMapper().writeValueAsString(user));
//json ---> bean
String str="{"sex":"man","age":22,"JsonPropertyName":"zhangsan"}";
System.out.println(new ObjectMapper().readValue(str, User.class).toString());
}
测试结果:
{"sex":"man","age":22,"JsonPropertyName":"zhangsan"}
User [name=zhangsan, sex=man, age=22]
可见,bean转成json字符串后,@JsonProperty注解的bean属性名已经替换成了指定属性名:JsonPropertyName;
json字符串转成bean后,@JsonProperty注解指定的属性名已经替换成了bean属性名:name;
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>版本号</version>
</dependency>
实体类:User.java
import com.alibaba.fastjson.annotation.JSONField;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JSONField(name="JSONFieldName")
private String name;
private String sex;
private Integer age;
}
测试方法:
@Test
public void testSONField(){
//bean ---> json
User user=new User("zhangsan","man",22);
System.out.println(JSON.toJSONString(user));
//json ---> bean
String str="{"JSONFieldName":"zhangsan","age":22,"sex":"man"}";
System.out.println(JSON.parseObject(str, User.class).toString());
}
测试结果:
{"JSONFieldName":"zhangsan","age":22,"sex":"man"}
User [name=zhangsan, sex=man, age=22]
通过format属性可以指定日期类型属性的格式,以及将数字类型转为字符串类型的格式
public class User {
private String name;
private int age;
@JSONField(format = "yyyy-MM-dd")
private Date birthday;
@JSONField(format = "#,###.00")
private double salary;
}
public class User {
@JSONField(serialize = false)
private int userId;
private String name;
private int age;
}
在上面的例子中,使用@JSONField注解将userId属性从序列化中排除
public class User {
private int userId;
private String name;
@JSONField(deserialize = false)
private int age;
}
在上面的例子中,使用@JSONField注解将age属性从反序列化中排除
通过ordinal属性可以指定属性的顺序
public class User {
@JSONField(ordinal = 2)
private String name;
@JSONField(ordinal = 1)
private int age;
}
在上面的例子中,使用@JSONField注解指定了age属性的顺序为1,name属性的顺序为2
通过defaultValue属性可以指定属性在Java对象中的默认值
public class User {
@JSONField(defaultValue = "0")
private int userId;
@JSONField(defaultValue = "N/A")
private String name;
private int age;
}
在上面的例子中,使用@JSONField注解指定了userId属性的默认值为0,name属性的默认值为“N/A”
public class User {
private int userId;
@JSONField(type = FieldType.STRING)
private int age;
}
在上面的例子中,使用@JSONField注解指定了age属性的类型为字符串类型