Spring

[Spring] @RequestBody

JM_Code 2022. 11. 17. 15:52

@RequestBody

결론 : @PostMapping을 사용한다고 해서 무분별하게 @RequestBody를 사용할 것이 아니라 xml이나 JSON 형태로 요청할 경우에만 파라미터 타입까지 정확하게 설정하면서 사용한다.

 

1. 프런트에서 구현되지 않은 백엔드 기능 체크하다가 다음 코드 확인

//비밀번호 변경할 때 아이디 참조해서 기존 비밀번호 가져오기(입력한 비밀번호와 일치하는 지 확인용)
    @PostMapping("/selectpass")
    public boolean selectPass(@RequestBody String u_id, String u_pass) {
        System.out.println("ID : " + u_id);
        System.out.println("Pass : " + u_pass);
        return userService.selectPass(u_id, u_pass);
    }

2. 프런트에서 u_id, u_pass를 받아와야함

3. Post 방식으로 사용할 것으로 기대하고 작성했기 때문에 @RequestBody를 사용

4. 착각했던 내용 : @RequestBody를 사용하면 두 값 모두 받아올 수 있을 것이라 생각

5. 실제 들어오는 값(Postman 이용)

u_id에 JSON 형태로 두 값이 모두 들어오고 u_pass에는 null이 들어옴

 

6. @RequestBody 제거한 후 값

//비밀번호 변경할 때 아이디 참조해서 기존 비밀번호 가져오기(입력한 비밀번호와 일치하는 지 확인용)
@PostMapping("/selectpass")
public booleanselectPass(String u_id, String u_pass) {
    System.out.println("ID : " + u_id);
    System.out.println("Pass : " + u_pass);
returnuserService.selectPass(u_id, u_pass);
}

모두 null

원인 : Post 방식의 Body 타입으로 값을 보내주는데 @RequestBody 어노테이션이 없으므로 받지 못함

 

7. @RequestParam을 모두 붙여준 값 (넘어오지 않음)

//비밀번호 변경할 때 아이디 참조해서 기존 비밀번호 가져오기(입력한 비밀번호와 일치하는 지 확인용)
    @PostMapping("/selectpass")
    public boolean selectPass(@RequestParam String u_id, @RequestParam String u_pass) {
        System.out.println("ID : " + u_id);
        System.out.println("Pass : " + u_pass);
        return userService.selectPass(u_id, u_pass);
    }

400번 반환, “Bad Request” 에러 발생

원인 : @RequestParam의 기본 속성은 required : true, Get 방식으로 보내는 각각의 데이터를 읽음 따라서, 보내주는 값이 반드시 필요한데 개별 데이터나 쿼리스트링으로 각각 보내는게 아니라 JSON 형식으로 보내서 받아주는 쪽도 없고 받는 쪽에서 데이터를 반드시 보내라고 하니까 에러 발생

 

8. 파라미터 타입 변경하고 @RequestBody 어노테이션 사용

//비밀번호 변경할 때 아이디 참조해서 기존 비밀번호 가져오기(기존 비밀번호와 일치하면 비밀번호 변경불가)
    @PostMapping("/selectpass")
    public boolean selectPass(@RequestBody User user) {
        System.out.println("ID : " + user.getU_id());
        System.out.println("Pass : " + user.getU_pass());
        return userService.selectPass(user);
    }

값이 잘 넘어옴

반환값도 false로 정확히 넘어옴 (보내준 비밀번호와 DB의 비밀번호가 일치하지 않으면 false 반환)

일치하는 값으로 넘겼을 경우 true

결론 : @PostMapping을 사용한다고 해서 무분별하게 @RequestBody를 사용할 것이 아니라 xml이나 JSON 형태로 요청할 경우에만 파라미터 타입까지 알맞게 설정하면서 사용한다.

'Spring' 카테고리의 다른 글

[Spring] @RequestParam  (0) 2022.11.16