如何将mapstruct与特定setter一起使用

csga3l58  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(452)

我正在尝试将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来Map,但它不起作用,因为我的临时setter。我怎样才能解决这个问题?

zfciruhq

zfciruhq1#

你必须实现自定义 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);
    }
  }
}

相关问题