У меня есть такой сопоставитель:
@Mapper(uses = {DateMapper.class, AuthenticationMapper.class})
public interface LocalUserMapper {
LocalUserMapper INSTANCE = Mappers.getMapper(LocalUserMapper.class);
@Mapping(target = "domains", source = "localUser.directDomains")
@Mapping(target = "phone", source = "localUser.phoneNumber")
@Mapping(target = "displayName", source = "localUser.displayPartyName")
@Mapping(target = "authenticationMethod", expression =" java(mapAuthenticationMethodForLocalUser(localUser))")
UserDTO convertLocalUser(LocalUser localUser);
}
для сопоставления поля «authenticationMethod» я хочу сделать несколько вещей локально, а затем пусть AuthenticationMapper (см. Выше) сделает все остальное (примечание: я не могу изменить основную функцию сопоставления AuthenticationMapper в соответствии с моими потребностями, она используется в других местах) в идеале используйте эту функцию для сопоставления (как выражение)
default String mapAuthenticationMethodForLocalUser(LocalUser localUser) {
AuthenticationMethod authenticationMethod = localUser.getAuthenticationMethod();
if (localUser.useTwoLayerAuthentication()) {
// do some stuff and return something
} //else
return **authenticationMethodMapper**.convertAuthenticationMethod(authenticationMethod);
}
это не работает, как если бы impl генерируется authenticationMethodMapper - это как-то неизвестное поле
кто-нибудь знает хороший способ это сделать? спасибо!