моя контактная информация
Почтамезофия@protonmail.com
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.получить, установить и свойствавыше
Аннотацию @JSONField проще использовать. Значение аннотации по умолчанию совпадает с именем свойства, тогда как @JsonProperty требует указания имени свойства вручную.
Аннотация @JSONField поддерживает дополнительные параметры сопоставления атрибутов, например формат даты во время сериализации, обработку нулевых значений и т. д.
Производительность аннотации @JSONField выше, поскольку fastjson сам по себе является высокопроизводительной библиотекой обработки JSON.
При использовании платформы Джексона вы можете использовать только аннотацию @JsonProperty и не можете использовать аннотацию @JSONField.
Если вы используете новыйSpringboot проектпо умолчанию используется сериализация Джексона, просто используйте аннотации непосредственно в свойствах.
<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 имя свойства bean-компонента, аннотированное @JsonProperty, было заменено указанным именем свойства: JsonPropertyName;
После преобразования строки json в компонент имя свойства, указанное в аннотации @JsonProperty, заменяется именем свойства компонента: 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]
Атрибут формата можно использовать для указания формата атрибутов типа даты и формата преобразования числовых типов в строковые типы.
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;
}
В приведенном выше примере атрибут userId исключен из сериализации с помощью аннотации @JSONField.
public class User {
private int userId;
private String name;
@JSONField(deserialize = false)
private int age;
}
В приведенном выше примере свойство age исключено из десериализации с помощью аннотации @JSONField.
Порядок атрибутов можно указать с помощью порядкового атрибута.
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, а значение по умолчанию атрибута имени — «Н/Д».
public class User {
private int userId;
@JSONField(type = FieldType.STRING)
private int age;
}
В приведенном выше примере аннотация @JSONField используется для указания типа атрибута age как строкового типа.