异常解决
出现场景:业务中常出现的日期,从库中查询出的时间往往不能直接导出;性别男女啦,库中存的往往是“0”、“1”;
很多网上例子是在日期直接在实体类中标注,比如
这样直接转换往往会报如标题的错误
org.apache.poi.ss.usermodel.Cell.setCellValue(Ljava/time/LocalDateTime
比较常见的做法是写一个类,专门做转换。
比如日期格式转换;Converter<T>
,其中T表示转换前的字段类型;
@Data
public class SupplierDateConverter implements Converter<Date> {
// 需要的日期格式(我们需要的日期样式)
private static final String PATTERN_YYYY_MM_DD = "yyyy-MM-dd";
@Override
public Class<?> supportJavaTypeKey() {
return Converter.super.supportJavaTypeKey();
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return Converter.super.supportExcelTypeKey();
}
/**
* @param value 库中的数据,即目标转换的字段
* @param contentProperty
* @param globalConfiguration
* @return
* @throws Exception
*/
@Override
public WriteCellData<?> convertToExcelData(Date value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_YYYY_MM_DD);
String dateValue = sdf.format(value);
return new WriteCellData<>(dateValue);
}
}
比如性别字段的转换
@Data
public class SupplierThree2OneConverter implements Converter<String> {
/**
* 0表示:是
*/
private static final String THREECERTIFICATES = "0" ;
/**
* 1表示:否
*/
private static final String NO_THREECERTIFICATES = "1";
@Override
public Class<?> supportJavaTypeKey() {
//实体类中对象属性类型
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
// Excel中对应的CellDate属性类型
return CellDataTypeEnum.STRING;
}
/**
* @param value
* @param contentProperty
* @param globalConfiguration
* @return
* @throws Exception
*/
@Override
public WriteCellData<?> convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
if (THREECERTIFICATES.equals(value)) {
return new WriteCellData<>("是");
} else if (NO_THREECERTIFICATES.equals(value)) {
return new WriteCellData<>("否");
}
return null;
}
}
另外,mapstruct
用法与此相似
- 测试导出注意事项
- 用swagger测导出,返回一串乱七八糟的
- 用postman测试,一切都使用默认配置,不需要配请求头之类。但是运行时需要注意,点这个