Как конвертировать 0 в ноль с BeanIO

У меня вопрос, как преобразовать целочисленное значение 0 в ноль? Ранее я использовал аннотацию Xmappr, и она хорошо работала с этой аннотацией:

@Text 

Теперь я должен использовать BeanIO, поэтому я попытался:

@Field(xmlType=XmlType.Text) 

и это не работает.

Для успешного выполнения модульного теста необходимо прочитать число из файла XML. Если personNumber из XML равно 0, он должен быть записан в массиве как ноль. В этом случае массив должен выглядеть следующим образом: [1,2, null].

XML-файл:

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

Аннотация в Java ранее:

@Text
private Integer personNumber;

Аннотация в Java сейчас:

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

Может быть, это то, что мне нужно указать формат в поле аннотации:

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

Если да, какой формат должен быть указан?

1 ответ

Решение

Вы можете попробовать использовать пользовательские org.beanio.types.IntegerTypeHandler в return null когда число '0', Что-то вроде этого:

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;

Я не проверял это, но это должно работать.

Другие вопросы по тегам