Reputation: 15
I am trying to apply MapStruct to DDD. I created my entities with ad hoc setters like this:
@AllArgsContructor
@NoArgsConstructor //necessary to MapStruct
@Getter
class Employee {
private String id;
private String name;
public void updateName(String newName) {
this.name = newName;
}
}
and I have a EmployeeDto
to send data to frontend API:
@Getter
@AlArgsConstructor
@NoArgsConstructor //necessary to MapStruct
class EmployeeDto {
private String name;
private String id;
}
so, I am trying to use MapStruct to map, but it is not working because my ad hoc setter. How could I resolve this problem?
Upvotes: 0
Views: 1103
Reputation: 655
You have to implement custom AccessorNamingStrategy
. The way how to do it is well documented in section 13.1. Custom Accessor Naming Strategy of a MapStruct documentation.
In your case it should look something like this:
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);
}
}
}
Upvotes: 1