多個@JsonProperty操作同一個屬性


@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();
        }
    }
}
  • 證明該注解可以作用在方法上

總結:

  1. 本人理解這個注解作用在屬性上,那么該屬性的Get/Set方法則是注解內名字所對應生成的 (Class文件內set方法上注解就是該屬性上@JsonProperty)
  2. 作用在方法上,那么就是根據json屬性名調用的同名@JsonProperty(xxxx) setxxx方法的邏輯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM