@JsonProperty和@JSONField注解的區(qū)別解析(最新)
JSON(JavaScript Object Notation)
json是一種常見的數據交換的輕量級數據格式。HTTP協(xié)議傳輸數據可以有多種數據格式,比如下面幾種常見數據傳輸格式,除此之外還有其他的數據交換格式。
| 數據傳輸類型 | 編碼類型 | 示例 |
|---|---|---|
| 表單格式 | application/x-www-form-urlencoded | username=zk&password=123 |
| JSON(JavaScript Object Notation) | application/json | {"username": "zk","password": "123"} |
| XML(eXtensible Markup Language) | application/xml | <user><username>zk</username><password>123</password></user> |
Jackson
Jackson是一款優(yōu)秀的JSON解析庫,添加了依賴之后就可以使用對應的注解,讓我們能夠自由的將Java對象和JSON做轉換。

比如Java對象轉JSON

@JsonProperty和@JSONField
為了解決JSON字符串和其實體bean的屬性名匹配不上的問題,@JsonProperty和@JSONField都可以將某一屬性名序列化為另一屬性名。
那么@JsonProperty和@JSONField有什么區(qū)別呢?
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.hust.zhang.serializable.JsonUtils;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
public class JsonPropertiesVsJsonField {
@AllArgsConstructor
@Data
@Builder
static class Properties {
@JsonProperty(value = "json-properties")
private String jsonProperties;
@JSONField(name = "json-field")
private String jsonField;
}
public static void main(String[] args) {
Properties properties = Properties.builder()
.jsonProperties("test-properties")
.jsonField("test-field")
.build();
System.out.println(JsonUtils.toJson(properties));
System.out.println(JSON.toJSONString(properties));
}
}輸出結果如下,
{"jsonField":"test-field","json-properties":"test-properties"}
{"json-field":"test-field","jsonProperties":"test-properties"}
可以看到調用JsonUtils.toJson方法時,加了@JsonProperty才與bean實際屬性名匹配。
其中該方法定義如下,ObjectMapper的writeValueAsString方法。
/**
* Json轉換工具類
*/
@Slf4j
public final class JsonUtils {
/**
* 私有無參構造方法 常量類不能實例化,直接引用
*/
private JsonUtils() {
}
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
static {
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
OBJECT_MAPPER.configure(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), true);
}
public static String toJson(Object object) {
try {
return OBJECT_MAPPER.writeValueAsString(object);
} catch (JsonProcessingException e) {
log.error("Failed to write the object to string" + object.getClass().getName());
return null;
}
}
public static <T>T parse(String json, Class<T> tClass){
try {
return OBJECT_MAPPER.readValue(json,tClass);
} catch (JsonProcessingException e) {
log.error("Failed to deserialize JSON content, json value : " + json);
return null;
}
}
}除此之外還可以看看@JsonAlias注解。
參考鏈接
1、https://baijiahao.baidu.com/s?id=1765042798858921947&wfr=spider&for=pc
2、https://developer.aliyun.com/article/768691
到此這篇關于@JsonProperty和@JSONField注解的區(qū)別的文章就介紹到這了,更多相關@JsonProperty和@JSONField注解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
intellij idea修改maven配置時總是恢復默認配置的解決方法idea版本(2020.2.x)
這篇文章主要介紹了intellij idea修改maven配置時總是恢復默認配置的解決方法idea版本(2020.2.x),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
java復制文件的4種方式及拷貝文件到另一個目錄下的實例代碼
這篇文章主要介紹了java復制文件的4種方式,通過實例帶給大家介紹了java 拷貝文件到另一個目錄下的方法,需要的朋友可以參考下2018-06-06

