Spring

Spring) Request - @Requestparam, @pathVariable ,@Requestbody

김코식 2022. 11. 30. 23:29


form 태그에서 데이터를 전달할 때 컨트롤러에서 데이터를 할당하는 대표적인 방법

  • URL로 파라미터를 전달하는 방식
  1. @RequestParam
  2. @PathVariable

 

  • 클라-서버 통신을 위해 xml이나 json 기반의 메시지 형식의 데이터를 주고받는 방식
  1. @RequestBody

@Requestparam 

쿼리 스트링으로 파라미터를 URL로 전송받을 때

url 뒤에붙는 파라미터 값을 가져옴

 

ex) ? 이후의 key,value형태

(localhost:8080/hello-api?name=kim)

 

% 만약 RequestParam에 key값이 존재하지 않을 경우 erreor발생

이를 방지하기 위해 default 값 설정

(required = false,defaultValue="") // 값이 존재하지 않으면 default로 " " 값이 들어가게 된다.


@pathVariable 

템플릿 변수의 값을 추출하고 그 값을 메소드 변수에 할당

url에서 각 구분자에 들어오는 값을 처리할 때 사용

 

ex)

@GetMapping("/api/memos/{id}")
public MemoResponseDto openMemo(@PathVariable Long id){
    return memoService.openMemo(id);

@RequestBody

http 요청의 body가 담긴 값을 자바 객체로 변환

비동기 처리 구현시 @ResponseBody와 함께 사용

GET/POST의 요청 파라미터라면 사용하지 않아도 된다

 

ex)

@PostMapping("/api/memos")
public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto){
    return memoService.createMemo(requestDto);
}

@Requestparam , @pathVariable  차이

 

pathVariable - 1개의 값만 가져옴

@Requestparam - key,value &으로 여러 데이터

 

ex)@Requestparam으로 여러 데이터 가져오기

@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name,@RequestParam("num") int num){
    Hello hello = new Hello();
    hello.setName(name);
    hello.setNum(num);
    return hello;
}

 

url : (http://localhost:8080/hello-api?name=kim&name=in&num=1)

 

결과)

 


참고 자료