如何解决csvMapper.schemaFor().withHeader()在将List<ADto>出力到csv文件时,不会出现次位为大写字母的字段被出力两次的情况
时间: 2023-12-14 21:37:54 浏览: 23
在List<ADto>出力到csv文件时,如果次位为大写字母的字段被出力两次,可能是因为csvMapper.schemaFor().withHeader()方法默认会使用字段名作为header,而Java中的getter/setter方法名符合驼峰命名规则,有可能会导致生成的header中出现重复的字段名。
解决这个问题的方法有两种:
1. 在ADto中使用@CsvBindByName注解,手动指定csv文件中对应字段的名称,避免重复。
例如:
```
public class ADto {
@CsvBindByName(column = "id")
private int id;
@CsvBindByName(column = "name")
private String name;
// ...
}
```
2. 自定义HeaderColumnNameTranslateMappingStrategy,将Java中的getter/setter方法名转换为csv文件中的header名称。
例如:
```
public class ADto {
private int id;
private String name;
// ...
// getter/setter methods
public static HeaderColumnNameTranslateMappingStrategy<ADto> getMappingStrategy() {
HeaderColumnNameTranslateMappingStrategy<ADto> strategy = new HeaderColumnNameTranslateMappingStrategy<>();
Map<String, String> columnMap = new HashMap<>();
columnMap.put("id", "ID");
columnMap.put("name", "Name");
// ...
strategy.setColumnMapping(columnMap);
return strategy;
}
}
```
然后在写出csv文件时,使用以下代码:
```
CsvMapper csvMapper = new CsvMapper();
CsvSchema schema = csvMapper.schemaFor(ADto.class).withHeader();
Writer writer = new FileWriter(file);
csvMapper.writer(getMappingStrategy()).with(schema).writeValues(writer).writeAll(list);
writer.close();
```
这样就可以避免次位为大写字母的字段被出力两次的情况了。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![dmg](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rpm](https://img-home.csdnimg.cn/images/20210720083646.png)