[부트캠프] TIL - @RequestMapping, @ResponseBody, @RequestBody
0812 코로나 확진으로 잠시 쉬어갑니다.
@RequestMapping
Spring Boot 사용시 특정 URL로 Request를 보낼때 Controller에서 어떠한 방식으로 처리할지 정의하는 방식,
이때 들어온 요청을 특정 method와 매핑하기 위해 사용하는 어노테이션이 바로 @RequestMapping입니다.
Spring MVC는 Front Controller 패턴을 사용하여 DispatcherServlet이 요청에 대해 가장 먼저핸들링 하고 작업을 처리해주며 시작을 합니다, 이때 DispatcherServlet은 요청을 처리할 Controller를 탐색하여 전달하는데 이때 사용되는 부분이
@RequestMapping(~) 으로 요청 URL의 형태를 보고 판단하여 각각에 맞는 Mapping을 가진 Controller에게 처리를 위임해줍니다.
//간단한 예시 localhost:8080/api/hello를 요청 하면 /api 로 해당 컨트롤러가 매핑을 하여 처리해준다.
@Controller
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "hello";
}
@GetMapping("/get")
@ResponseBody
public String get() {
return "Get Method 반환";
}
@PostMapping("/post")
@ResponseBody
public String post() {
return "Post method 반환";
}
@PutMapping("/put")
@ResponseBody
public String put() {
return "Put method 반환";
}
@DeleteMapping("/delete")
@ResponseBody
public String delete() {
return "Delete Method 반환";
}
}
+@RequestMapping은 Class와 Method에 붙일 수 있고, @GetMapping, PostMapping, @PutMapping 등은 Method에만 붙일 수 있습니다.
@RequestBody
json 기반 Http 바디를 자바 객체로 변환해줍니다.
public class Entity{
private Long id;
private String name;
private String address;
}
// API Controller
@PostMapping("/api/post")
public void requestTest(@RequestBody Entity entity) {
System.out.println("id = " + entity.id);
System.out.println("name = " + entity.name);
System.out.println("address = " + entity.address);
}
다음과 같은 내용을 HTTP Body에 담아서 POST 요청을 보내게 될 경우
POST /api/post HTTP/1.1
{
"id": 1,
"name": "user1"
}
@RequestBody 는 본문의 내용을 매핑해서 Entity 객체를 생성한다.
- entity.id == 1
- entity.name == "user1"
- entity.address == null
@ResponseBody
자바 객체를 json 기반의 Http 바디로 변환
@RestController를 사용하는 경우, 반환값에 자동으로 @ResponseBody 어노테이션이 붙으며 자바 객체를 반환하면 자동으로 Json 형식으로 매핑되어 응답합니다.
Spring에서는 @RequestBody, @ResponseBody 어노테이션을 명시함으로써 MessageConverter를 통한 데이터 변환 과정을 거치게 되는데요.
예를 들어서 클라이언트에서 서버에 JSON 형식의 requestBody로 요청 데이터를 전송했을 때, Java에서는 해당 JSON 형식의 데이터를 받기 위해서 JSON -> Java Object로의 변환이 필요합니다.
마찬가지로 요청된 데이터를 처리 후, 서버에서 클라이언트로 다시 응답 데이터 responseBody를 보낼 때도 Java Object에서 JSON 또는 XML 같은 형식으로의 변환이 필요합니다. 이러한 과정을 해당 어노테이션들이 처리해주는 것입니다.