簡體   English   中英

無法讀取 JSON:屬性的設置器定義沖突

[英]Could not read JSON: Conflicting setter definitions for property

當我第一次調用 API 時,我收到 JSON 響應,沒有任何錯誤。

當我第二次調用 API 時,我收到:

 Could not read JSON: Conflicting setter definitions for property "zipCode": com.sfr.cacheaddress.api.model.Address#setZipCode(1 params) vs com.sfr.cacheaddress.api.model.Address#setZipCode(1 params) at [Source: (byte[])"{"@class":"com.sfr.cacheaddress.api.model.MetaAddress","address":{"id":"3525622624","streetNumber":5,"streetNumberComplement":"A","streetType":"RUE","streetName":"RUE DES PERRIERES","streetNumberAndName":"5 A RUE DES PERRIERES","zipCode":"35800","city":"ST BRIAC SUR MER","address":"5 A RUE DES PERRIERES, 35800 ST BRIAC SUR MER","inseeCode":"35256","enabled":false,"codeRivoli":"0611","matriculeVoie":"00676767"},"complementCount":1}"; line: 1, column: 11 ]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "zipCode": com.sfr.cacheaddress.api.model.Address#setZipCode(1 params) vs com.sfr.cacheaddress.api.model.Address#setZipCode(1 params) at [Source: (byte[])"{"@class":"com.sfr.cacheaddress.api.model.MetaAddress","address":{"id":"3525622624","streetNumber":5,"streetNumberComplement":"A","streetType":"RUE","streetName":"RUE DES PERRIERES","streetNumberAndName":"5 A RUE DES PERRIERES","zipCode":"35800","city":"ST BRIAC SUR MER","address":"5 A RUE DES PERRIERES, 35800 ST BRIAC SUR MER","inseeCode":"35256","enabled":false,"codeRivoli":"0611","matriculeVoie":"00676767"},"complementCount":1}"; line: 1, column: 11

獲取 API:

 @GetMapping("streetNumber") public MetaAddress getAddressByIdRivoliStreetNumber(String code) { return addressService.findByRivoliStreetNumber(code); }

元地址.java:

 @Data @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) public class MetaAddress { Address address; long complementCount; }

地址.java:

 @Data @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) public final class Address implements Serializable { private String id; private String zipCode; private String city; //@JsonIgnore public void setZipCode(String zipCode) { this.zipCode = zipCode; } @JsonSetter public void setZipCode(String[] zipCode) { this.zipCode = zipCode[0]; } }

在反序列化期間,需要第二個setZipCode(String[] zipCode) (其中包含@JsonSetter ),我嘗試將@JsonIgnore添加到第一個方法public void setZipCode(String zipCode)但問題仍然存在。

精度:使用Adress class (不是MetaAddres )的其他 API 工作正常。 問題發生在我調用使用MetaAddress object 的 API

請問有人遇到同樣的問題嗎?

一種解決方案是刪除緩存。 另一個更好的解決方案是通過刪除其中一個或同時刪除兩個設置器來刪除沖突的設置器,因為您已經在使用@Data注釋。

如果您期望與addressService.findByRivoliStreetNumber(code)返回的 json 不同的郵政編碼格式,例如 string 和字符串數組,那么您可以將兩種甲酸鹽作為不同的屬性處理。

如果您有特殊原因這樣做,請提及。 也許這種情況下有更好的設計處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM