@Mapper(componentModel = "spring")
public interface UserMapper {
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void updateUserInfoFromRequest(UpdateUserDto updateUserDto, @MappingTarget User user);
}
updateUserInfoFromRequest
컨트롤러에 적용
@PutMapping("/my-info")
public ResponseEntity<User> updateUser(@Valid @RequestBody UpdateUserDto updateDto) {
String username = getLoginUsername();
Optional<User> optionalUser = userRepository.findByUsername(username);
User user = optionalUser.get();
userMapper.updateUserInfoFromRequest(updateDto, user);
userRepository.save(user);
return new ResponseEntity<>(user, HttpStatus.OK);
}
다시 적용해보니 MapStruct가 제대로된 메서드를 생성하지 않는 에러가 발생
이럴 때는 @BeanMapping
에 nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS
를 추가하면 됨
@PutMapping("/my-info")
public ResponseEntity<User> updateUser(@Valid @RequestBody UpdateUserDto updateDto) {
String username = getLoginUsername();
Optional<User> optionalUser = userRepository.findByUsername(username);
User user = optionalUser.get();
if (updateDto.getPassword() != null) {
user.setPassword(updateDto.getPassword());
}
if (updateDto.getEmail() != null) {
user.setEmail(updateDto.getEmail());
}
if (updateDto.getMobileNumber() != null) {
user.setMobileNumber(updateDto.getMobileNumber());
}
if (updateDto.getDescription() != null) {
user.setDescription(updateDto.getDescription());
}
if (updateDto.getUserStatus() != null) {
user.setUserStatus(updateDto.getUserStatus());
}
userRepository.save(user);
return new ResponseEntity<>(user, HttpStatus.OK);
}