🙈

⃝ 동글동글 ⃝

🪐ᐩ˖ 🍎

Spring/Spring Boot

Spring Boot에서 HTTP Request 데이터를 Controller에서 받는 방법

JONG_UK 2023. 3. 30. 18:44
728x90
반응형
SMALL

MBTI 테스트 프로젝트를 만들면서 React와 REST API를 이용해 데이터를 전송하고 전달받았습니다.

그러던 중 React에서 보내주는 데이터를 Spring Boot에서 받는 방법에는 여러가지가 있어서 제가 작업하며 사용했던 방식을 하나씩 적어보려고 합니다.

 

Controller

첫 번째 방법은 HttpServletRequest 를 이용해 프론트에서 전달하는 URL 파라미터에 담긴 값을 꺼내오는 방법입니다.

HttpServletRequest의 request에는 URL 파라미터가 담겨있습니다.

 

지금 작성하는 페이지의 URL을 보면 '?'뒤에 나오는 것이 URL 파라미터 입니다. (key, value 형태)

https://jonguk.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts

현재 type, returnURL 두개가 담겨있는데 request.getParameter("type") 방식으로 '=' 뒤에 있는 value 문자열 값을 가져올 수 있습니다.

@GetMapping("/login")
public ResponseEntity<LoginResponseDto> kakaoLogin(HttpServletRequest request) {
    String code = request.getParameter("code");
    String kakaoAccessToken = authService.getKakaoAccessToken(code);
    return authService.kakaoLogin(kakaoAccessToken);
}

두 번째 방법도 마찬가지로 URL 뒤에 파라미터로 id가 전달 됐다면, @PathVariable("id") 처럼 사용해서 값을 꺼내올 수 있습니다.

https://gmmclients.click/logout/?id=2656
@PostMapping("/logout/{id}")
public ResponseEntity<String> kakaoLogout(@PathVariable("id") Long id) {
    return authService.kakaoLogout(id);
}

세 번째 방법은 DTO 클래스에 저장하는 방식입니다.

@RequestBody 어노테이션을 이용하면 프론트(React)에서 전달하는 Request(요청)에 대한 Body(data)의 JSON 데이터를 DTO에 입력되게 할 수 있습니다. 

 

이 방식을 사용하려면 DTO 클래스에 원하는 데이터가 잘 입력될 수 있도록 프론트와 Data Type과 Data의 이름을 잘 맞춰서 미리 만들어 두셔야 합니다.

@PostMapping("/result")
public ResponseEntity<SetOwnerResultDto> ownerResultSave(@RequestBody SetOwnerResultDto requestDto) {
    return authService.ownerResultSave(requestDto);
}

DTO

@Data
public class SetOwnerResultDto {
    private Long id;
    String mbti;
    String result;
}
728x90
반응형
LIST