@Controller @RestController의 차이 HTTP Response Body가 생성되는 방식의 차이


@Controller를 사용하는 경우

  1. Client가 URI 요청을 보냄
  2. DispatcherServlet과 Handler Mapping이 요청을 Intercept
  3. Controller에 의해 요청을 처리 하고 DispatcherServlet Model과 View를 적절히 Client에 리턴
@Controller
public class WebController {

@GetMapping("/")
public String main(Model model) {
return "main";
}
}


@ResponseBody를 사용할 경우

Spring3 버전 이후로 출시

자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할을

 1.2 방식은  @Controller와 같다

 3. 여기에서는 View를 거치지 않고 Controller에서 직접 데이터를 리턴


@Controller
public class WebController {

@PostMapping("/post")
public @ResponseBody Posts hello(@RequestBody Posts post) {
// post.set함수
// post.set함수
// post.set함수
return post;
}
}


[추가]

@RequestBody 어노테이션이란?

HTTP 요청의 body 내용을 자바 객체로 매핑하는 역할을 합니다.

-> 당연히 method 방식으로 Get을 쓰면 원하는 인자값을 받지 못함

        -> Get은 Body데 데이터를 담지 않기 때문에, POST를 사용


추가적으로 @PathVariable, @RequestParam이 있다

자꾸 딴곳으로 새는데 ,,, 이 부분도 같이 보는것이 좋다.


@PathVariable  

URI 템플릿 변수에 접근할 때 사용


@RequestParam  

Http 요청 파라미터를 매핑


@GetMapping("/board/{boardNo}")
public String hello(@RequestParam String name, @RequestParam String birth, @PathVariable String boardNo) {
return "Hello World";
}

들어온 데이터 값을 따로 처리하지는 않았지만, 위와 같은 방식으로 사용된다.

@RequestParam은 String name = request.getParameter("name")과 같다.



@RestController 어노테이션이란?

@RestController = @Controller + @ResponseBody 

Spring 4 버전이후로 출시

@Controller와 @ResponseBody를 @RestController가 가지고 있기 때문에 데이터 중심의 구현

작동 방식은 @ResponseBody와 동일


@RestController
public class WebRestController {

@GetMapping
public String hello() {
return "Hello World";
}
}


@RestController를 자세히 본다면, @Controller와 @ResponseBody 를 확인할 수 있음

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {




[참조]

https://docs.spring.io/spring/docs/current/javadoc-api/




블로그 이미지

yhmane

댓글을 달아 주세요