作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果标题不清楚,我深表歉意,让我通过提供示例代码来说明:
更新ProfileDto
public class UpdateProfileDto {
@NotEmpty
private String firstName;
@NotEmpty
private String lastName;
@Size(max = 20)
private String currentPassword;
@Size(max = 20)
private String newPassword;
@Size(max = 20)
private String confirmNewPassword;
// getters and setters
}
@Qualifier
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface EncodedMapping {
}
public class PasswordEncoderMapper {
protected final PasswordEncoder passwordEncoder;
public PasswordEncoderMapper(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
@EncodedMapping
public String encode(String value) {
return passwordEncoder.encode(value);
}
}
@Mapper(config = MapperConfig.class, componentModel = "spring", uses = PasswordEncoderMapper.class)
public interface UserMapper {
@Mappings({
@Mapping(target = "firstName", source = "firstName"),
@Mapping(target = "lastName", source = "lastName"),
@Mapping(target = "fullName", expression = "java(user.getFirstName() + \" \" + user.getLastName())"),
@Mapping(target = "password",
source = "newPassword",
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
qualifiedBy = EncodedMapping.class)
})
void updateUserFromDto(UpdateUserProfileDto updateUserProfileDto, @MappingTarget User user);
}
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2020-03-11T13:51:34+0800",
comments = "version: 1.3.0.Final, compiler: javac, environment: Java 1.8.0_231 (Oracle Corporation)"
)
@Component
public class UserMapperImpl implements UserMapper {
@Autowired
private PasswordEncoderMapper passwordEncoderMapper;
@Override
public void updateUserFromDto(UpdateUserProfileDto updateUserProfileDto, User user) {
if ( updateUserProfileDto == null ) {
return;
}
if ( updateUserProfileDto.getFirstName() != null ) {
user.setFirstName( updateUserProfileDto.getFirstName() );
}
else {
user.setFirstName( null );
}
if ( updateUserProfileDto.getLastName() != null ) {
user.setLastName( updateUserProfileDto.getLastName() );
}
else {
user.setLastName( null );
}
if ( updateUserProfileDto.getNewPassword() != null ) {
user.setPassword( passwordEncoderMapper.encode( updateUserProfileDto.getNewPassword() ) );
}
user.setFullName( user.getFirstName() + " " + user.getLastName() );
}
}
UserMapperImpl
中,我不仅想检查
newPassword
是否有值......而且检查
currentPassword
和
newPassword
有值并继续
user.setPassword()
。
...
if ( updateUserProfileDto.getCurrentPassword() != null && updateUserProfileDto.getNewPassword() != null ) {
user.setPassword( passwordEncoderMapper.encode( updateUserProfileDto.getNewPassword() ) );
}
...
UserMapper
以便在设置目标
currentPassword
并仍使用
newPassword
之前检查
user.password
和
PasswordEncoderMapper.encode(password)
?
expression
而不是
source
并检查
currentPassword
和
newPassword
是否都有值,然后将
user.password
设置为
newPassword
。否则,它不会使用
user.password
对
NullValuePropertyMappingStrategy
做任何事情......但似乎不允许混合
expression
和
NullValuePropertyMappingStrategy
。
最佳答案
我将从以下方法开始
@Mapper(config = MapperConfig.class, componentModel = "spring")
public abstract class UserMapper { // using class instead of interface to be able to inject beans
@Autowired
private PasswordEncoderMapper passwordEncoderMapper;
@Mappings({
// your non-password mappings
})
void updateUserFromDto(UpdateUserProfileDto updateUserProfileDto, @MappingTarget User user);
@AfterMapping
void setPassword(UpdateUserProfileDto updateUserProfileDto, @MappingTarget User user) {
if (updateUserProfileDto.getCurrentPassword() != null && updateUserProfileDto.getNewPassword() != null) {
user.setPassword(passwordEncoderMapper.encode( updateUserProfileDto.getNewPassword()));
}
}
}
关于spring-boot - 具有条件和 nullValuePropertyMappingStrategy 的 Mapstruct 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60630681/
我有以下映射器 @Mapper(config = MappingConfig.class) public interface PokerRoomMapper { @Mapping(target =
如果源中的相应属性为空,我想将目标对象中的属性映射到默认值(例如,字符串为“”)。我怎样才能做到这一点?我看到了 nullValuePropertyMappingStrategy = NullValu
如果标题不清楚,我深表歉意,让我通过提供示例代码来说明: 更新ProfileDto public class UpdateProfileDto { @NotEmpty private
我是一名优秀的程序员,十分优秀!