컨트롤러에서 데이터를 전달해 인자에 할당하는 대표적인 방법으로는 @RequestBody 와 @RequestParam이 있다.
@RequestParam
@RequestParam 어노테이션은 단일 파라미터를 전달 받을때 사용하는 어노테이션 입니다.
넘어온 값의 키로 값을 불러오는 어노테이션 입니다.
@GetMapping("/save")
public Word createWord(@RequestParam String content){
Word new_word = new Word(content);
return wordrepository.save(new_word);
}
RequestParam을 사용하면 단일 변수값을 받아오기 때문에 받아오는 데이터가 많아지기도 하고
return을 해줄 때도 다시 Json 객체로 변환후 반환을 해주어야 한다는 번거로움이 있습니다.
@RequestBody
@RequsetBody 어노테이션은 한만디, 자바 객체를 JSON 형태로 핸들링 해주는 기능을 제공하는 어터테이션이다!
이게 왜 필요하고 편하냐면,
CSR(Client Server Rendering)이 유행(?) 하고있는 요즘, API에서 객체를 요청하고 응답받을때 JSON 형태로 주고 받는 경우가 많은데, 이 모든 걸 알아서 자동으로 해준다. (베리 나이스)
@RequestBody의 주요기능은, Json 데이터를 자바 객체로 - 자바 객체를 Json 객체로 변환해준다는 것이다.
@RestController와 같이 쓰여야한다.
RestController 어노테이션 자체가, REST 방식의 통신을 한다는 의미이다.
@RequiredArgsConstructor
@RestController
public class ArticleController {
private final ArticleService articleService;
@PostMapping("/article")
public Article setArticle(@RequestBody ArticleRequestDto articleRequestDto){
return articleService.setArticle(articleRequestDto);
}
}
대신 주의해야할 건, Json 객체의 요청 변수명과, 자바 클래스의 멤버변수명이 동일해야 자동으로 매핑이 된다.
해당되는 변수명이 없다면 자동으로 Null 값이 들어간다.