HTTP 요청 - JSON, HTTP 응답 - static, 뷰 템플릿

황준하·2023년 9월 19일

SpringMVC

목록 보기
18/19
post-thumbnail

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 응답 - 정적 리소스, 뷰 템플릿

정적 리소스

  • 웹 브라우저에 정적인 HTML, css, js를 제공할 때는, 정적 리소스를 사용한다.

뷰 템플릿 사용

  • 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다.

HTTP 메시지 사용

  • HTTP API를 제공하는 경우에는 HTML이 아니라 테이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.

뷰 템플릿

@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 를 반환하는 경우

명시성이 너무 떨어지고 이렇게 딱 맞는 경우도 많이 없어서, 권장하지 않는다.

Thymeleaf 스프링 부트 설정

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

스프링 부트가 자동으로 ThymeleafViewResolver와 필요한 스프링 빈들을 등록한다.

0개의 댓글