背景:
在实际开发中,我们经常会遇到实体类转换的问题,比如说:给DTO转VO的时候,我们希望将其中为null的转为空字符串,又或者将1、2、3等魔法值转为相应字符…
方案:
这里我们使用mapstruct来实现实体映射。
它是一个注解处理器,用于生成类型安全、高性能和无依赖的 bean 映射代码。 与动态映射框架相比,MapStruct 具有以下优势:
- 通过使用普通方法调用而不是反射来快速执行
- 编译时类型安全:只能映射相互映射的对象和属性,不能将订单实体意外映射到客户 DTO 等。
- 在构建时清除错误报告,如果映射不完整(并非所有目标属性都被映射)映射不正确(找不到合适的映射方法或类型转换)
详情可以查看官网:https://mapstruct.org/documentation/stable/reference/html/ 这里我们使用它提供的自定义自定义映射方法来实现我们的需求
public class ConvertNull {
private ConvertNull() {
}
public static String characterTrailing(String value) {
if (StringUtils.isNullOrUndefined(value)) {
return "";
}
return value;
}
}
定义映射器的 Java 接口
@Mappings(value = {
@Mapping(target = "pid", source = "p_id"),
@Mapping(target = "content", expression = "java(marchsoft.modules.linglu.common.service.mapstruct.ConvertNull.characterTrailing(categoryJsonDTO.getDesc()))")
})
PostCategory jsonDtoToEntity(CategoryJsonDTO categoryJsonDTO);
注意:expresssource ion 使用全路径。target是我们要转换的目标 expression 和source 不能同时出现在一个mapping中
随笔
1、关于vue前端使用history路由模式的时候,首页登录重定向,类似与访问 xxxx.com/login?redirect=%2Fdashboard 刷新之后路径重新history定向导致xxxx.com/login?redirect=%2Fdashboard?redirect=%2Fdashboard 可以修改nginx的配置
location / {
root /data/project/dist/;
try_files $uri $uri/ /index.html?s=$uri&$args;
index index.html index.htm index.php;
}
|