-
스프링 웹 MVC - 1 (스프링 부트 활용 - 5)Programming/Spring Boot 2020. 3. 10. 00:44728x90
- 아무런 설정 없이 스프링 웹 MVC를 바로 사용할 수 있는 것은 AutoConfigure 덕분
- WebMvcConfigurer 을 구현하여 스프링 자동 설정에 더해서 여러 설정을 입맛대로 변경 가능
1. HttpMessageConverters
- 스프링 프레임워크에서 제공하는 인터페이스
- HTTP 요청 본문 객체로 변경하거나, 객체를 HTTP 응답 본문으로 변경할 때 사용
{"username":hongchan, "password":"123"} <-> User
- @RequestBody, @ResponseBody와 함께 쓰임
1) 테스트 코드 작성@Test public void createUser_JSON() throws Exception { String userJson = "{\"username\":\"hongchan\", \"password\":\"123\"}"; mockMvc.perform(post("/user/create") .contentType(MediaType.APPLICATION_JSON_UTF8) .accept(MediaType.APPLICATION_JSON_UTF8) .content(userJson)) .andExpect(status().isOk()) .andExpect(jsonPath("$.username", is(equalTo("hongchan")))) .andExpect(jsonPath("$.password", is(equalTo("123")))); }
2) UserController 작성- @RestController를 명시하면, @ResponseBody 와 @RequestBody는 생략가능
@RestController public class UserController { @PostMapping("/user/create") public @ResponseBody User createUser(@RequestBody User user) { return user; } }
3) User 작성public class User { private long id; private String username; private String password; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
2. ViewResolver
- Reqeust header에 있는 accept에 따라서 응답을 다르게 해줌
- accept란? 클라이언트가 응답 받기원하는 형태
- 테스트 코드에서 accept를 변경@Test public void createUser_XML() throws Exception { String userJson = "{\"username\":\"hongchan\", \"password\":\"123\"}"; mockMvc.perform(post("/user/create") .contentType(MediaType.APPLICATION_JSON_UTF8) .accept(MediaType.APPLICATION_XML) .content(userJson)) .andExpect(xpath("/User/username").string("hongchan")) .andExpect(xpath("/User/password").string("123")) .andDo(print()); }
- 의존성 추가
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.6</version>
</dependency>
3. 정적 리소스 지원
- 이미 만들어져 있는 리소스를 제공하는 방법
- 동적으로 뷰를 만드는 것이 아니라, 이미 있는 리소스를 제공하는 것
- 기본 리소스 위치
classpath:/staticclasspath:/public
classpath:/resources/
classpath:/META-INF/resources
예) "/hello.html" => /static/hello.html
- 맵핑 설정 변경 ("/hongchan/hello.html")
spring.mvc.static-path-pattern=/hongchan/**
- WebMvcConfigurer의 addResourceHandlers로 커스텀마이징 할 수 있음
새로운 패스를 추가 (대체가 아님)@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/jiyun/**") .addResourceLocations("classpath:/jiyun/") .setCachePeriod(20); } }
3. 웹 JAR
- 클라이언트 사이드 자바스크립트 라이브러리(jQuery, Angular, Vue, React...)를 사용할 수 있게 함
- mvnrepository에서 의존성 추가 후 <script src=""> 사용
- 리소스 체이닝? 의존성 추가 후 버전 없이 읽어올 수 있음
4. Index 페이지와 파비콘
- static 디렉토리에 index.html / favicon.ico 를 두면 자동으로 홈페이지, 파비콘으로 인식
- 파비콘 설정 시 캐시 때문에 바로 변경 안되는 점 유의 (캐시 지우거나, 개인정보보호 모드로 테스트)인프런 백기선님 '스프링 부트’ 강의를 듣고 정리한 내용입니다.
728x90'Programming > Spring Boot' 카테고리의 다른 글
스프링 데이터 - 1 (스프링 부트 활용 - 7) (0) 2020.03.11 스프링 웹 MVC - 2 (스프링 부트 활용 - 6) (0) 2020.03.10 로깅, 테스트, Devtools (스프링 부트 활용 - 4) (0) 2020.03.09 외부 설정과 프로파일 (스프링 부트 활용 - 3) (0) 2020.03.09 내장 웹 서버와 응용 (스프링 부트 원리 - 2) (0) 2020.03.08