해당 글은 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() 함수를 사용하지 않아도 저장이 된다.
'Spring > SpringBoot' 카테고리의 다른 글
[goormedu 강의] 스프링부트 블로그 만들기 04 - 07 삭제하기 테스트 (0) | 2024.08.24 |
---|---|
[goormedu 강의] 스프링부트 블로그 만들기 04 - 06 영속성 컨텍스트와 더티체 (0) | 2024.08.24 |
[goormedu 강의] 스프링부트 블로그 만들기 04 - 04 전체 select 및 paging 테스트 (0) | 2024.08.15 |
[goormedu 강의] 스프링부트 블로그 만들기 04 - 03 id로 select 테스트 (0) | 2024.08.13 |
[goormedu 강의] 스프링부트 블로그 만들기 04 - 02 회원가입을 위한 enum 사용법 (0) | 2024.08.13 |