- 場景:
我需要利用二維碼攜帶對象的JSON化數據,然后供別的系統掃描讀取,在使用過程中由於攜帶的數據量太大,導致二維碼點陣過密,識別率下降。此時需要對二維碼中的JSON數據進行精簡處理,首先想到的就是將字段的key縮短,但是不能直接縮短對象的類字段名,這會導致類字段的可讀性下降和連帶修改多處代碼的問題。
實踐證明,僅僅精簡字段名稱達到的效果十分有限,遠遠達不到內容縮減的要求;最后采用了gzip壓縮json字符串的方案,完美
- 由於我使用的是Jackson庫,它提供了@JsonProperty注解,可以在序列化過程中啟用字段別名,並且在序列化和反序列化兩個方向上都是對等的,簡直不要太方便。
- 模型類定義:
@Data
public class Cat {
@JsonProperty("fn") // 定義了一個更精簡的別名
public String firstName;
}
- 序列化:
@GetMapping("/get")
public Cat get() {
Cat cat = new Cat();
cat.setFirstName("楊XX");
return cat;
}
// 請求結果:{"fn": "楊XX"}
- 反序列化:
@PostMapping("/put")
public Cat put(@RequestBody Cat cat) {
return cat;
}
// 請求參數_0:{"firstName": "123"},后端成功解析。
// 請求參數_1:{"fn": "456"},后端成功解析。
結論:使用@jackson的JsonProperty注解,序列化能很好的使用別名替換真實字段,並且在反序列化過程中能同時支持別名和真名。