728x90
반응형
HTTP 응답
응답을 어떻게 다뤄야 하는지 알아보자.
응답데이터를 만드는 방법
정적리소스
- 웹브라우저에 정적인 HTML, CSS, js 를 제공할때 정적 리소스를 사용한다.
- src/main/resources/static/basic/hello-form.html
- http://localhost:8080/basic/hello-form.html 로 실행한다. - 그렇게 되면 정적리소스를 보여준다.
뷰 템플릿 사용
- 웹 브라우저에 동적인 HTML을 제공할때 사용
- 뷰템플릿을 거쳐 HTML 이 생성된다.
- 뷰가 응답을 만들어서 전달한다.
뷰 템플릿 생성
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p th:text="${data}">empty</p>
</body>
</html>
뷰템플릿 호출하는 방법
1. ModelAndView 를 생성해서 URL, 과 Data 를 넣는 방식으로 호출이 가능하다.
@Controller
public class ResponseVIewController {
@RequestMapping("/response-view-v1")
public ModelAndView responseView1() {
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data","hello!");
return mav;
}
}
2. 간편하게 Model 을 파라미터로 생성하여 쉽게 넣어줄수 있다.
@Controller
public class ResponseVIewController {
@RequestMapping("/response-view-v2")
public String responseView2(Model model) {
model.addAttribute("data", "Hello!!");
return "response/hello";
}
}
3. 이방법은 권장하지 않는다.
- return type void 인데 그이유는 RequestMapping 안에 html 과 동일한 url 을 넣어주었기 때문이다.
- 요청한 URL 을 참고해서 논리 뷰 이름으로 사용한다.
@Controller
public class ResponseVIewController {
// 권장하지 않는다. 완전 별로다.
@RequestMapping("/response/hello")
public void responseView3(Model model) {
model.addAttribute("data", "Hello!!");
}
}
HTTP 메시지 사용
- HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 한다.
- 바디에 JSON 같은 형식으로 데이터를 담아 보낸다. - 참고사항 RestController 는 ResponseBody+Controller 이다.
Writer 활용
- HttpServletResponse 객체에서 writer 을 사용하여 body 에 데이터를 넣는다.
@Slf4j
//@Controller
//@ResponseBody
@RestController //@ResponseBody + @Controller
public class ResponseBodyController {
// Writer 를 가져와 Body에 직접 넣어준다.
@GetMapping("/response-body-string-v1")
public void responseBodyStringV1(HttpServletResponse res) throws IOException {
res.getWriter().write("OK");
}
}
ResponseEntity 활용1
- ResponseEntity 를 사용하면 상태코드도 같이 넘길수 있다.
@Slf4j
//@Controller
//@ResponseBody
@RestController //@ResponseBody + @Controller
public class ResponseBodyController {
// ResponseEntity 로 상태코드도 같이 넘길수 있다.
@GetMapping("/response-body-string-v2")
public ResponseEntity<String> responseBodyStringV2(HttpServletResponse res) {
return new ResponseEntity<String>("OK", HttpStatus.OK);
}
ResponseEntity 활용2
- 객체를 직접 담을 수 있다. 그렇게 되면 컨버터가 바디에 JSON 형태로 데이터를 담는다.
@Slf4j
//@Controller
//@ResponseBody
@RestController //@ResponseBody + @Controller
public class ResponseBodyController {
@GetMapping("/response-body-json-v2")
public ResponseEntity<HelloData> responseBodyJsonV2(HttpServletResponse res) {
HelloData data = new HelloData();
data.setUsername("skahn");
data.setAge(19);
return new ResponseEntity<HelloData>(data,HttpStatus.OK);
}
}
ResponseBody 활용3
- ResponseBody 를 사용하는 경우에는 메소드 레벨에서 상태 코드를 넣을수 없다.
- @ResponseStatus 로 상태코드를 같이 넘길수 있다.
@Slf4j
//@Controller
//@ResponseBody
@RestController //@ResponseBody + @Controller
public class ResponseBodyController {
// API 를 만들때 가장 많이 쓰는 스타일이다.
// ResponseBody 를 사용할 경우 아래와같이 상태값을 넘길수 있다.
@ResponseStatus(HttpStatus.OK)
//@ResponseBody
@GetMapping("/response-body-json-v3")
public HelloData responseBodyJsonV3(HttpServletResponse res) {
HelloData data = new HelloData();
data.setUsername("skahn");
data.setAge(19);
return data;
}
}
참고
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/lecture/71224?tab=curriculum
728x90
반응형
'Spring > spring mvc 1 스터디' 카테고리의 다른 글
[Spring] @ModelAttribute 사용하기 (0) | 2021.11.27 |
---|---|
[Spring] Message Converter (0) | 2021.11.25 |
[Spring] HTTP 요청메세지 TEXT, JSON (0) | 2021.11.16 |
[Spring] HTTP 요청파라미터 (0) | 2021.11.13 |
[Spring] 요청매핑 (0) | 2021.11.10 |
댓글