2017-10-17 13 views
0

내 질문에 정수 값을 변환하는 방법입니다 ~ null? 이전에 나는 Xmappr 주석을 사용하고는이 주석과 함께 좋은 일 : BeanIO와 null을 0으로 변환하는 방법

@Text 

가 지금은 BeanIO를 사용하는, 그래서 시도 :

@Field(xmlType=XmlType.Text) 

를하고 제대로 동작하지 않습니다.

단위 테스트는 XML 파일에서 숫자를 읽어야 성공할 수 있습니다. XML에서 personNumber가 0이면 배열로 null로 작성해야합니다. 이 경우 배열은 다음과 같아야합니다 : [1,2, null].

XML 파일 : 이전에 자바

<Person ...> 1 </Person> 
. 
. 
<Person ...> 2 </Person> 
. 
. 
<Person ...> 0 </Person> 

주석 : 이제 자바

@Text 
private Integer personNumber; 

주석 :

@Field(xmlType=XmlType.Text) 
private Integer personNumber; 

가 내가 필드 주석의 형식을 지정해야하는 일이 될 수 :

@Field(xmlType=XmlType.Text, format=....) 
private Integer personNumber; 

그렇다면를 어떤 형식을 지정해야 하는가?

+0

nillable을 true로 설정해 보셨습니까? http://beanio.org/2.1/docs/api/org/beanio/annotation/Field.html#nillable-- –

+0

'0'은 실제로 'null'입니까? XML에 사람 번호가 포함되지 않아야한다면 왜 '' 태그의 본문이 비어 있지 않습니까? – Thomas

+0

@OHGODSPIDERS 시도했는데 오류가 발생했습니다. xmLType 'text'가 nillable이 아닙니다. – Ensz

답변

1

'0' 일 때 사용자 정의 org.beanio.types.IntegerTypeHandler ~ return null을 사용해 볼 수 있습니다. 이런 식으로 뭔가 :

import org.beanio.types.IntegerTypeHandler; 

public class IntegerToNullTypeHandler extends IntegerTypeHandler { 

    /** 
    * {@inheritDoc} 
    * @see org.beanio.types.IntegerTypeHandler#createNumber(java.lang.String) 
    */ 
    @Override 
    protected Integer createNumber(String text) throws NumberFormatException { 
    if (text != null && "0".equals(text)) { 
     return null; 
    } 
    return super.createNumber(text); 
    } 
} 

은 사용하려는 필드를 변경 TypeHandler이를 사용하려면 TypeHandler에 :

@Field(xmlType=XmlType.Text, handlerClass=IntegerToNullTypeHandler.class) 
private Integer personNumber; 

나는 이것을 테스트하지 않은,하지만 작동합니다.