728x90
반응형
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
반응형