이번에는 응답에 대해서 자세하게 알아본다
응답도 세가지로 나뉜다
1. html, css등 정적 텍스트
2. 뷰 템플릿을 통한 동적 텍스트
3. API를 위한 데이터
@Controller
public class ResponseViewController {
//ModelAndView 사용
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1(){
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data","Hi Hi~");
return mav;
}
//Model 사용 후 String으로 반환
//Controller에 String을 반환하면 view의 논리적 이름이 된다.
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model){
model.addAttribute("data","Hi hi!");
return "response/hello";
}
//요청 URL과 실행할 URL이 같은 경우 생략 가능
@RequestMapping("/response/hello")
public void responseViewV3(Model model){
model.addAttribute("data","Hi hi!");
}
}
세번째의 경우 조건이 더 있는데
HttpServletResponse나 OutputStream(Writer)같은 HTTP 메시지 바디를 처리하는
파라미터가 없어야한다. 이 경우 요청 URL을 참고해서 논리 뷰 이름으로 사용한다.
- 이 방식은 명시성이 떨어지고 조건도 까다로워서 권장하지 않는다고 한다.
또 두번째 방법에서 @ResponseBody를 사용하면 그냥 텍스트로 바로 출력해버린다.
HTTP API
@Slf4j
@Controller
public class ResponseBodyController {
@GetMapping("/response-body-string-v1")
public void responseBodyV1(HttpServletResponse response) throws IOException {
response.getWriter().write("ok");
}
@GetMapping("/response-body-string-v2")
public ResponseEntity<String> responseBodyV2(){
return new ResponseEntity<>("ok", HttpStatus.OK);
}
@ResponseBody
@GetMapping("/response-body-string-v3")
public String responseBodyV3(){
return "ok";
}
@GetMapping("/response-body-json-v1")
public ResponseEntity<HelloData> responseBodyJsonV1(){
HelloData helloData = new HelloData();
helloData.setUsername("userA");
helloData.setAge(20);
return new ResponseEntity<>(helloData, HttpStatus.OK);
}
@ResponseStatus(HttpStatus.OK)
@ResponseBody
@GetMapping("/response-body-json-v2")
public HelloData responseBodyJsonV2(){
HelloData helloData = new HelloData();
helloData.setUsername("userA");
helloData.setAge(20);
return helloData;
}
}
마지막처럼 @ResponseBody로 객체를 반환하는 것이 가장 편하지만
조건에 따라 동적으로 변환할 필요가 있으면 ResponseEntity를 사용하면 된다.
또 메서드마다 @ResponseBody를 붙이지 않고
@Controller대신에 @RestController를 사용하면
모든 메서드에 @ResponseBody가 적용된다. 따라서 뷰 템플릿에 사용하는 것이 아니라
Rest API를 만들 때 사용하는 컨트롤러이다.
'개발자일지 > Spring' 카테고리의 다른 글
Spring MVC 2편 - Thymeleaf (0) | 2022.03.17 |
---|---|
Spring MVC 복습 - 간단 게시판 만들기 (0) | 2022.03.15 |
Spring MVC 1편 - MVC 기본기능(요청) (0) | 2022.03.11 |
Spring MVC 1편 - MVC 구조 이해 (0) | 2022.03.10 |
Spring MVC 1편 - MVC 프레임워크 만들기 (0) | 2022.03.08 |