속성에 대한 getter 및 setter와의 간단한 인터페이스가 있습니다.역 직렬화시 속성 무시
public interface HasMoney {
Money getMoney();
void setMoney(Money money);
}
이 인터페이스를 구현하는 또 다른 클래스 인 UserAccount가 있습니다.
public class UserAccount implements HasMoney {
private Money money;
@Override
Money getMoney() // fill in the blanks
@Override
void setMoney(Money money) // fill in the blanks
}
내 문제는 내가 돈 속성을 직렬화하지만 즉,이 속성에 대한 사용자로부터 어떤 값을 허용 해달라고 deserialize하는 동안 무시해야한다는 것입니다. 나는 setter에 @JsonIgnore를 시도하고 getter에 @JsonIgnore (false)를 시도했지만 무시한다. 그러나 그것을 직렬화하는 동안에도 그렇게한다.
저는 setter에서 @JsonIgnore를 시도하고 getter에서 @JsonProperty를 사용하여 Jackson에게 우리가이 속성을 추적하려고한다고 명시 적으로 말했습니다. 돈 속성이 서버로 보내지면서 Jackson이 그것을 역 직렬화하려고 시도 할 때 응용 프로그램이 손상되는 것 같습니다. Throwing MalformedJsonException : Money 유형의 객체를 생성 할 수 없습니다.
가장 이상한 점은 setter에서 @JsonIgnore를 설정하고 setter에서 @JsonProperty를 설정하면 대부분의 경우 속성이 프리미티브 일 때 효과가 있다는 것입니다.
. 또한 objectMapper.disable (MapperFeature.USE_GETTERS_AS_SETTERS)을 추가해야만했습니다. 답을 수정하면 받아 들일 것입니다. 슬프게도 이것에 대한 더 깨끗한 방법은 없다 (Atleast 나는 그것을 찾을 수 없었다). –
@NishantNagwani -이 기능을 사용하지 않으면 이상하게 작동합니다. 내 대답에 선택적 메모를 추가하는 중이지만'USE_GETTERS_AS_SETTERS'를 필요로하는 설정과 다른 점이 있는지 궁금합니다. – Perception
나는 그것을 다시 시험해 보았다. 내 환경에서 작동하지 않습니다. 나는 잭슨 2.1.1을 사용하고있다. 내가 얻은 오류는 다음과 같습니다 { "메시지에 변형 된 json이 사용되었습니다. 사용 된 데이터 유형이 잘못되었습니다. \ n 'setterless'속성 'money'를 직렬화 해제하는 중 : get 메소드가 참조 체인 : com.abc를 통해 null을 반환했습니다. def.Money]) " } –