Partial Update

지니🧸·2023년 3월 3일
0

삽질 저장소

목록 보기
7/16

Mapper

@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);
    }

Mapper 에러

다시 적용해보니 MapStruct가 제대로된 메서드를 생성하지 않는 에러가 발생
이럴 때는 @BeanMappingnullValueCheckStrategy = 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);
}
profile
우당탕탕

0개의 댓글