https://github.com/lay423/springmvc/commit/5ac56b162fbd717db43698e1967bc4dbe0466d4c
이번에는 HTTP API에서 주로 사용하는 JSON 데이터 형식을 조회해보았다.
기존 서블릿에서 사용했던 방식과 비슷하게 시작해보자.
@ResponseBody
@PostMapping("/request-body-json-v3")
public String requestBodyJsonV3(@RequestBody HelloData helloData) {
log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
return "ok";
}
@RequestBody는 생략 불가능
@RequestBody를 생략하면 @ModelAttribute가 적용되어 버린다.
HttpEntity를 사용해도 된다.
@ResponseBody
@PostMapping("/request-body-json-v3")
public String requestBodyJsonV3(HttpEntity<HelloData> httpEntity) {
HelloData data = httpEntity.getBody();
log.info("username={}, age={}", data.getUsername(), data.getAge());
return "ok";
}
@ResponseBody
@PostMapping("/request-body-json-v5")
public HelloData requestBodyJsonV5(@RequestBody HelloData data) {
log.info("username={}, age={}", data.getUsername(), data.getAge());
return data;
}
@RequestBody 요청
JSON 요청 -> HTTP 메시지 컨버터 -> 객체
@ResponseBody 응답
객체 -> HTTP 메시지 컨버터 -> JSON 응답
정적 리소스
뷰 템플릿 사용
HTTP 메시지 사용
@Controller
public class ResponseViewController {
@RequestMapping("/response-view-v1")
public ModelAndView responseView1() {
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data", "hello!");
return mav;
}
@RequestMapping("/response-view-v2")
public String responseView2(Model model) {
model.addAttribute("data", "hello!");
return "response/hello"; //@Controller 이면서 String을 반환한다? => String이 view 논리적 이름이 된다.
}
@RequestMapping("/response/hello")
public void responseView3(Model model) { //권장하지 않음
model.addAttribute("data", "hello!");
}
}
void 를 반환하는 경우
명시성이 너무 떨어지고 이렇게 딱 맞는 경우도 많이 없어서, 권장하지 않는다.
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
스프링 부트가 자동으로 ThymeleafViewResolver와 필요한 스프링 빈들을 등록한다.