2017-10-17 11 views
0

Ma question est de savoir comment convertir la valeur de l'entier à null? Auparavant, je l'annotation Xmappr et cela a fonctionné bien avec cette annotation:Comment convertir 0 à null avec BeanIO

@Text 

Maintenant, je dois utiliser BeanIO, alors j'ai essayé:

@Field(xmlType=XmlType.Text) 

et il ne fonctionne pas.

Le test d'unité doit lire le nombre à partir du fichier XML pour être un succès. Si le numéro personnel de XML est égal à 0, il doit être écrit dans le tableau en tant que null. Dans ce cas, le tableau doit ressembler à ceci: [1,2, null].

fichier XML:

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

Annotation en Java précédemment:

@Text 
private Integer personNumber; 

Annotation en Java maintenant:

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

Serait-ce la chose que je dois spécifier le format dans l'annotation sur le terrain:

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

Si oui, quel format devrait être préciser?

+0

Avez-vous essayé de définir nillable à true? http://beanio.org/2.1/docs/api/org/beanio/annotation/Field.html#nillable-- –

+0

Est-ce que '0' est vraiment équivalent à' null'? Si votre code XML ne doit pas contenir de numéro de personne, alors pourquoi le corps de la balise '' n'est pas vide? – Thomas

+0

@OHGODSPIDERS J'ai essayé, j'ai eu une erreur: xmLType 'texte' n'est pas nillable – Ensz

Répondre

1

Vous pouvez essayer d'utiliser un org.beanio.types.IntegerTypeHandler personnalisé à return null lorsque le numéro est '0'. Quelque chose comme ceci:

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); 
    } 
} 

Pour utiliser ce TypeHandler changer le champ sur lequel vous souhaitez utiliser le TypeHandler à:

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

Je ne l'ai pas testé, mais il devrait fonctionner.