@RestController VS @Controller
일반석으로 @Contorller 애노테이션을 사용해서 매핑하게 되면 반환 값을 String 으로 했을 때 반환 값 자체를 뷰 이름으로 인식한다.
그래서 뷰를 착고 뷰가 렌더링 되게 되는데 @RestController를 사용해서 반환 값을 String 으로 하게 되면 HTTP 메세지 바디에 반환 String 값을 바디에 바로 입력을 한다. 따라서 실행 결과로 String 메세지를 받을 수 있다.
PathVariable을 이용한 GetMapping
@GetMapping("/경로/{id}")
public String usingPathvariableGetMapping(@PathVariable("id") int id){
//(@PathVariable int id)로 변환 가능
//타입은 정의하기 나름, String 으로 보내는것도 가능
return "성공";
}
@GetMapping("/경로/{id}/경로/{number}")
public String usingPathvariableGetMapping(@PathVariable int id, @PathVariable String number){
//이런 식으로 다중매핑으로 사용 할 수도 있음
return "성공";
}
필수파라미터의 구분
@ResponseBody
@RequestMapping("/경로")
public String requestParam(@RequestParam(required = true) String name, @RequestParam(required = false) Integer age){
//기본값은 true 이기 때문에 생략하면 true
//true 값일 경우 무조건 있어야 하는 값이고 false일 경우 값이 없어도 괜찮다.
//(tip : null이 들어갈 수도 있는 숫자 값을 비울때는 Integer 값으로 넣어야 함)
//@RequestParam(defaltValue = -1) int num : required = false가 되면서 빌 경우 -1이 들어감
}
@ResponseBody
: 문자열을 반환하면 HTTP 응답에 직접적으로 반환값을 넣어서 반환하게 된다.
-> RestController 와 동일한 기능
@ModelAttribute 이용해서 객체 가져오기
@ResponseBody
@RequestMapping("/경로")
public String requestData(@ModelAttribute Data data){
//데이터를 이런 식으로 받아 올 수 있다.
return "ok";
}
@Data
public class Data{
private String name;
private int age;
}
@ModelAttribute는 생략이 가능하다.
@RequestBody 이용해서 텍스트 받아오기
@ResponseBody
@PostMapping("/경로")
public String requestData(@RequestBody String data){
return data;
}
단순 텍스트 형태의 HTTP 요청 메세지를 RequestBody로 쉽게 받아 올 수 있다.
이 기능은 view를 사용하지 않는다. 또 요청 파라미러를 조회하는 기능과는 다르게 생각해야 한다.
요청 파라미터를 조회하는 기능은 @RequestParam, @ModelAttribute
HTTP 메세지 바디를 직접 조회하는 기능은 @RequestBody 기능으로 서로 다른 것이다.
@RequestBody 이용해서 데이터 받아오기
@ResponseBody
@PostMapping("/경로")
public Data requestBody(@RequestBody Data data){
//json 형태로 데이터를 아예 받아 올 수 있다.
return data;
}
@Data
public class Data{
private String name;
private int age;
}
단순 String뿐 아니라 객체를 직접 넘기는 것도 가능.