다음과 같이 resultCode, resultMessage, siteId JSON 스트링이 있고, 해당 JSON 스트링 값을 ConstraintData DTO 클래스의 프로퍼티에 bind 시키기 위해 다음과 같은 코드를 사용했다.
String body = {\"resultCode\":1000,\"resultMessage\":\"test\",\"siteId\":1111}
@Data
public class ConstraintData {
private int siteId;
}
ObjectMapper mapper = new ObjectMapper();
ConstraintData data = mapper.readValue(body, ConstraintData.class);
허나, 이와 같이 코드를 작성하게 된다면 다음과 같은 예외를 접하게 될 것이다.
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "resultCode" (Class com.test.dto.base.ConstraintData), not marked as ignorable
이유는 JSON 스트링에는 resultCode, resultMessage name이 존재하지만 ConstraintData 클래스에는 해당 멤버 변수가 존재하지 않기 때문이다.
예외 내용을 살펴보면 "알려지지 않은 resultCode" 라고 표시된다.
전달해 주는 JSON 스트링 값을 모두 다 받아서 처리해야 한다는 규칙이 없다면 내가 필요한 값만 ConstraintData 클래스에 정의하여 바인드 시키면 될 것이다.
그러기 위해선 다음과 같이 두 가지 방법을 사용하면 된다.
첫 번째는 ObjectMapper 클래스를 초기화 한 후 다음의 설정을 추가
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
두 번째는 ConstraintData 클래스에 다음의 annotation을 추가
@JsonIgnoreProperties(ignoreUnknown = true)
'프로그래밍' 카테고리의 다른 글
Spring MappingJacksonJsonView modelKey가 하는 역할 (0) | 2014.03.15 |
---|---|
JUnit private method test (0) | 2014.03.04 |
제너릭 메소드 (0) | 2014.03.01 |
JUnit 테스트 실행 시 src/test/resource 패키지의 설정 파일만 읽어 들일까? (3) | 2014.02.25 |
spring security ajax session timeout 체크 방법 (1) | 2014.01.08 |
Ant style pattern 정리 (399) | 2014.01.06 |
spring mvc:resources를 이용한 정적 리소스 캐쉬 문제 해결 방안 (0) | 2014.01.02 |
logback if condition 사용 시 주의 사항 (0) | 2013.12.23 |