Spring Batch : PassThroughFieldExtractor with BigDecimal formatting

十年热恋 提交于 2019-12-02 10:17:23

You can

  1. Write your own BigDecimalToStringConverter implements Converter<BigDecimal, String> to format big decimal without trailing 0's
  2. Create a new ConversionService (MyConversionService) and register into the custom converter
  3. Extends DelimitedLineAggregator, inject MyConversionService, override doAggregate() to format fields using injected conversion service

public class MyConversionService extends DefaultConversionService {
  public MyConversionService() {
    super();
    addConverter(new BigDecimalToStringConverter());
  }
}

public class MyFieldLineAggregator<T> extends DelimitedLineAggregator<T> {
  private ConversionService cs = new MyConversionService();

  public String doAggregate(Object[] fields) {
    for(int i = 0;i < fields.length;i++) {
      final Object o = fields[i];
      if(cs.canConvert(o.getClass(), String.class)) {
        fields[i] = cs.convert(o, String.class);
      }
    }
    return super.doAggregate(fields);
  }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!