본문 바로가기
Spring/SpringBoot

[goormedu 강의] 스프링부트 블로그 만들기 04 - 05 update 테스트

by 코딩맛 2024. 8. 15.
해당 글은 groomedu의 스프링부트 나만의 블로그 만들기 강의를 보고 개인적으로 정리한 글입니다.

 

@PutMapping을 통해 수정

여기서 url 값이 "/dummy/user/{id}"가 2개가 있지만 하나는 @GetMapping이므로 둘이 구분됌.

@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id, @RequestBody User requestUser) throws IllegalAccessException {
    System.out.println("id :"+id);
    System.out.println("password :"+requestUser.getPassword());
    System.out.println("email :"+requestUser.getEmail());

    User user = userRepository.findById(id).orElseThrow(()->{
        return new IllegalAccessException("수정에 실패하였습니다.");
    });

    user.setPassword(requestUser.getPassword());
    user.setEmail(requestUser.getEmail());

    userRepository.save(user);
    return user;
}

 

1. @PathVariable로 id 값을 받고

2. json으로 요청한 값을 @RequestBody로 User 객체로 받아옴.

 

** 여기서 json 데이터로 요청하면 JavaObject로 변환하여 받는데

이는 MessageConverter의 Jackson 라이브러리가 변환해서 받아줌.

** .save() 함수를 통해서 받아온 파라미터 값을 바로 업데이트하면 공백이 생겨서 들어감.

 

>> 해결 방법

.findById() 함수를 통해서 id 값에 해당하는 user 객체 정보를 들고와서

그 값에 파라미터 값을 세팅해서 업데이트 시켜줌.

 

.save() 함수는 id를 전달하지 않으면 insert 하고

.save() 함수는 id를 전달하면 update 한다.

 

더티 체킹

@Transactional을 걸면 .save() 함수를 사용하지 않아도 저장이 된다.