Jackson의 직렬화 및 역직렬화에 대한 다른 속성 이름
직렬화 및 역직렬화 중에 JSON 속성이 다른 이름을 가질 수 있습니까? Jackson 라이브러리에서는 이러한 사용자 정의가 가능합니다.
예를 들어 Coordinates 클래스를 고려해보세요.
<code class="java">class Coordinates { int red; }</code>
JSON에서 역직렬화할 때 다음 형식이 필요합니다.
<code class="json">{ "red": 12 }</code>
그러나 , 직렬화 중에는 다음과 같은 형식이어야 합니다.
<code class="json">{ "r": 12 }</code>
@JsonProperty 주석을 사용하여 이를 구현하면 getter와 setter의 이름이 다르기 때문에 의도한 대로 작동하지 않습니다.
<code class="java">class Coordinates { int red; @JsonProperty("r") public byte getRed() { return red; } @JsonProperty("red") public void setRed(byte red) { this.red = red; } }</code>
이로 인해 "인식할 수 없는 필드 "빨간색"" 예외가 발생합니다.
이 문제를 해결하려면 getter와 setter에 대해 다른 메서드 이름을 사용하세요.
<code class="java">public class Coordinates { byte red; @JsonProperty("r") public byte getR() { return red; } @JsonProperty("red") public void setRed(byte red) { this.red = red; } }</code>
이렇게 하면 Jackson은 속성을 다음과 같이 인식합니다. 필드가 다르므로 직렬화 및 역직렬화 중에 다른 이름을 사용할 수 있습니다.
예:
<code class="java">Coordinates c = new Coordinates(); c.setRed((byte) 5); ObjectMapper mapper = new ObjectMapper(); System.out.println("Serialization: " + mapper.writeValueAsString(c)); Coordinates r = mapper.readValue("{\"red\": 25}", Coordinates.class); System.out.println("Deserialization: " + r.getR());</code>
인쇄:
Serialization: {"r": 5} Deserialization: 25
위 내용은 Jackson에서 직렬화 및 역직렬화에 서로 다른 속성 이름을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!