java - 如何将 Mapstruct 与 Ad Hoc Setter 一起使用
问题描述
我正在尝试将 MapStruct 应用于 DDD。我用这样的临时设置器创建了我的实体:
@AllArgsContructor
@NoArgsConstructor //necessary to MapStruct
@Getter
class Employee {
private String id;
private String name;
public void updateName(String newName) {
this.name = newName;
}
}
我有一个EmployeeDto
将数据发送到前端 API:
@Getter
@AlArgsConstructor
@NoArgsConstructor //necessary to MapStruct
class EmployeeDto {
private String name;
private String id;
}
所以,我正在尝试使用 MapStruct 进行映射,但它无法正常工作,因为我的临时设置器。我该如何解决这个问题?
解决方案
您必须实施 custom AccessorNamingStrategy
。13.1节详细记录了如何做到这一点。MapStruct 文档的自定义访问器命名策略。
在您的情况下,它应该看起来像这样:
public class CustomAccessorNamingStrategy extends DefaultAccessorNamingStrategy {
@Override
public boolean isSetterMethod(ExecutableElement method) {
String methodName = method.getSimpleName().toString();
return methodName.startsWith("update") && methodName.length() > 6;
}
@Override
public String getPropertyName(ExecutableElement getterOrSetterMethod) {
if (isSetterMethod(getterOrSetterMethod)) {
String methodName = getterOrSetterMethod.getSimpleName().toString();
return IntrospectorUtils.decapitalize(methodName.substring(6));
} else {
return super.getPropertyName(getterOrSetterMethod);
}
}
}
推荐阅读
- python - **{key:value} 叫什么?
- c# - Prism + DryIoc 在尝试执行构造函数注入时崩溃?
- android - 如何从另一个 Android 应用程序小部件访问信息?
- php - PHP 代码查找从 html 表单获取用户输入的第二大数字
- haskell - 关于评价顺序
- .net - 删除 Webbrowser1 cookie 和缓存 .net
- keras - Keras Metric 奇怪的行为
- java - JNI - 如何将“jint”参数转换为“unsigned int”C 类型值
- javascript - 使用节点检查时未定义预期变量?
- javafx - 如何将列表的大小属性绑定到节点的禁用属性?