Spring 에서 @Controller
어노테이션은 보통 아래와 같이 view 페이지를 전달한다.
@Controller
public class HelloController {
@RequestMapping(value = "", method = {RequestMethod.GET})
public String hellow() {
return "hello";
}
}
클라이언트에는 hello.html
페이지가 전달되어 보여진다.
만약에 view 페이지가 아닌, 데이터를 전달하고 싶을땐 어떻게 할까?
@ResponseBody
를 사용하면 된다.
@ResponseBody
는 return 값을 JSON 형태로 바꿔 HTTP Body 에 담는 역할을 한다.
@ResponseBody
@RequestMapping(value = "/test", method = {RequestMethod.POST})
public String test() {
return "hello";
}
@ResponseBody
를 사용하였기 때문에 hello.html
페이지 대신 문자열 "hello"
가 전달된다.
문자열 외에도 Map, VO 등 도 전달할 수 있다.
@ResponseBody
@RequestMapping(value = "/test", method = {RequestMethod.POST})
public Map<String, Object> test() {
Map<String, Object> map = new HashMap<>();
map.put("result", "map 테스트 전송");
return map;
}
@ResponseBody
@RequestMapping(value = "/test", method = {RequestMethod.POST})
public TestDto test() {
TestDto dto = new TestDto();
return dto;
}
@RestController
을 이용해 API를 만들수도 있다.
@RestController
은 리턴값에 자동으로 @ResponseBody
을 붙게 되어 별도의 어노테이션을 붙이지 않아도 된다.
@RestController
public class HelloRestController {
@RequestMapping(value = "", method = {RequestMethod.GET})
public String hello() {
return "hello";
}
}
이부분은 개인적인 생각으로 작성하였습니다.
MVC 패턴으로 개발할 때는
@Controller
+ @ResponseBody
REST API 로 개발할 때는 (View 단을 건들 필요가 없는 경우)
@RestController
reference
https://memostack.tistory.com/243
https://2ham-s.tistory.com/294