2011-02-27 5 views
7

에 빈 문자열을 비 정렬 화하기 위해 NOT 나는 필드 등으로 DTO 클래스가 :JAXB는 : JAXB를 만드는 방법 0

@XmlAttribute 
@NotNull 
private Integer number = null; 

내가 정렬 화하는 XML에 노력하고있어 같은

... number="" ... 

Nuber 필드가 null을 유지해야하므로 유효성 검사 예외가 발생합니다. 대신 JAXB는이를 0으로 언 마샬링합니다. 올바르게 작동하게하려면 어떻게해야합니까?

답변

9

신뢰할 수있는 경우, 은 올바르게 동작합니다.입니다. number=""은 null을 의미하지 않으며 빈 문자열이며 JAXB는 올바르게 처리해야하며 Integer 데이터 유형에 대해 빈 문자열에 가장 가까운 것이 0이라고 결정합니다. null을 원하면 number 속성을 모두 생략해야합니다.

이 동작을 사용자 정의하려면 원시 문자열과 경계 유형 (즉, 문자열과 정수 사이) 사이의 변환을 원하는 방식으로 처리 할 수있는 javax.xml.bind.annotation.adapters.XmlAdapter의 하위 클래스를 작성해야합니다. @XmlJavaTypeAdapter 필드에 주석을 달아 해당 어댑터를 연결합니다.

+1

나는 이것이 올바르게 작동하는 것에 완전히 동의하지 않습니다. 빈 문자열과 int 간의 암시 적 변환은 없습니다 (예 : Integer.parseInt (""))는이 경우 NumberFormatException을 throw합니다. 그리고 그것은 내가 null을 원한다는 것이 아닙니다. 저는 클라이언트 입력을 비 정렬 화하고 있으며 반환되는 에러 코드는 숫자 속성이 생략되거나 값이없는 경우에 동일해야합니다. –

+2

@RA : 당신은 동의하지 않을 수도 있지만, 공평하지는 못하지만 공백 문자열이 "가치 없음"과 똑같이 강하게 반대합니다. * 값은 빈 문자열이며 'null'과 같지 않습니다. 그러나 우리 중 어느 쪽이 "정확하다"고 생각하던 상관없이, 중요한 것은 JAXB가 생각하는 것입니다. – skaffman

+0

빈 문자열은 "값이 없음"이 아니며 "int 값으로 변환 할 수 없습니다"입니다. –

관련 문제