@JsonProperty
首先這個注解是干嘛的呢,(用於JSON之間解析與傳遞)
-
可以作用在屬性上,給該屬性序列化為另一個名稱(別名),主要用來序列化和反序列化;
-
當前端傳json字符串,將會把json字符串反序列化為對象,會自動賦值對應的字段值
- 當后端接口響應前端對象返回json字符串,將會把對象序列化為json字符串,json字符串的屬性名為
@JsonProperty
指定的名稱(別名)
@Data @ToString public class User { private Integer userId; // JSON 接受創建對象 屬性是:userName // 給前端返回 屬性是:userName @JsonProperty("userName") private String name1; }
接下來說一下我的需求場景,需求是:2個JSON屬性名 對應一個屬性,問了一下項目組大佬,直接貼代碼
@Data @AllArgsConstructor @NoArgsConstructor @Builder public class ExtraInfoDTO { private String fieldName; private String fieldText; @JsonProperty("fieldValue") public void setFieldValue(String fieldValue){ this.fieldText = fieldValue; } @JsonProperty("fieldText") public void setFieldText(String fieldText){ this.fieldText = fieldText; } // 測試 public static void main(String[] args) { String json = "{'fieldName':'a','fieldText':'b'}"; ObjectMapper objectMapper = new ObjectMapper(); try { ExtraInfoDTO extraInfoDTO = objectMapper.readValue(json, ExtraInfoDTO.class); System.out.println(extraInfoDTO); }catch (Exception e){ e.printStackTrace(); } } }
- 證明該注解可以作用在方法上
總結:
- 本人理解這個注解作用在屬性上,那么該屬性的Get/Set方法則是注解內名字所對應生成的 (Class文件內set方法上注解就是該屬性上@JsonProperty)
- 作用在方法上,那么就是根據json屬性名調用的同名@JsonProperty(xxxx) setxxx方法的邏輯。