본문 바로가기
Spring

정적 컨텐츠, MVC, API

by 스니펫 2024. 6. 24.

1. 정적 컨텐츠

2. MVC와 템플릿 엔진

1) Controller

비지니스 로직, 내부적인 것을 처리하는 것에 집중

 @Controller
 public class HelloController {
     @GetMapping("hello-mvc")
     public String helloMvc(@RequestParam("name") String name, Model model) {
         model.addAttribute("name", name);
         return "hello-template";
     }
}

2) View

화면을 그리는 데에 집중

<!--resources/templates/hello-template.html-->
 <html xmlns:th="http://www.thymeleaf.org">
 <body>
 <p th:text="'hello ' + ${name}">"hello ${name}" 로 치환될 문장입니다</p>
 </body>
</html>

 

  • 실행 http://localhost:8080/hello-mvc?name=spring

3. API

1) @ResponseBody 문자 반환

@Controller
 public class HelloController {
     @GetMapping("hello-string")
     @ResponseBody
     public String helloString(@RequestParam("name") String name) {
         return "hello " + name;
     }
 }

@ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않는다.

대신에 HTTP의 BODY에 문자 내용을 직접 반환한다.

  • 실행 http://localhost:8080/hello-string?name=spring

페이지 소스 보기 시 BODY에 문자 내용이 그대로 반환되었음을 확인

2) @ResponseBody 객체 반환

@Controller
 public class HelloController {
     @GetMapping("hello-api")
     @ResponseBody
     public Hello helloApi(@RequestParam("name") String name) {
         Hello hello = new Hello();
         hello.setName(name);
         return hello;
     }
     static class Hello {
         private String name;
         public String getName() {
             return name;
         }
         public void setName(String name) {
             this.name = name;
         }
     }
}

‘@ResponseBody’ 를 사용하고, 객체를 반환하면 객체가 JSON으로 변환된다. {"name":"spring"}

  • 실행 http://localhost:8080/hello-api?name=spring

3) @ResponseBody 사용 원리

  • @ResponseBody 를 사용
    • HTTP의 BODY에 문자 내용을 직접 반환
    • viewResolver 대신에 HttpMessageConverter 가 동작
    • 기본 문자처리: StringHttpMessageConverter
    • 기본 객체처리: MappingJackson2HttpMessageConverter
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
  •  

'Spring' 카테고리의 다른 글

라이브러리, view 환경설정  (0) 2024.06.23
IoC Container, Bean, JPA  (0) 2023.11.04
MySQL 실행 오류, 데이터 처리  (0) 2023.11.03
Spring Boot  (0) 2023.11.01