1. @Configuration + @EnableWebMvc + WebMvcConfigurer 구현: 스프링 부트의 스프링 MVC 자동 설정 미사용
2. application.properties
3. @Configuration + WebMvcConfigurer 구현: 스프링 부트의 스프링 MVC 자동설정 + 추가 설정
Formatter설정 : Formatter Bean으로 등록하면 WebConfig에서 addFormatter 해줄 필요 없음 자동생성
Printer: 객체 -> 문자열
Parser: 문자열 -> 객체
@Component
public class PersonFormatter implements Formatter<Person>{
@Override
public Person parse(String text, Locale locale) throws ParseException{
Person person = new Person();
person.setName(text);
return person;
}
@Override
public String print(Person object, Locale locael){
return object.toString();
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry){
registry.addFormatter(new PersonFormatter());
}
}
도메인 클래스 컨버터 자동 등록 : @Entity
핸들러 인터셉터 : 로깅, 인증체크, Locale 변경 등
요청 -> preHandler1 -> preHandler2 -> Handler 요청처리 -> postHandler2 -> postHandler1 -> 뷰 랜더링 -> afterCompletion2 -> afterCompletion1
스프링과 관계없는 기능구현은 서블릿 필터로 구현 : ex) lucy-xss-filter
HandlerInterceptor 구현 및 WebMvcConfigurer 구현체에서 addInterceptors 오버라이딩하여 registry.addInterceptor로 등록 및 .order(숫자)로 실행순서 조절가능 낮은숫자가 먼저 실행 .addPathPatterns("URI") 특정 경로만 적용가능
리소스 핸들러 : 이미지, JS, CSS, HTML 등 정적 리소스 처리 핸들러 등록
스트링 부트 : 기본 정적 리소스 핸들러와 캐싱 제공
- 어떤 요청 패턴을 지원할 것인가
- 어디서 리소스를 찾을 것인가
- 캐싱
- ResourceResolver: 요청에 해당하는 리소스 찾는 전략
- ResourceTransformer: 응답으로 보낼 리소스를 수정하는 전략
- classpath:, file:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/mobile/**")
.addResourceLocations("classpath:/mobile/")
.setCacheControl(CacheControl.maxAge(10, TimeUnit.MINUTES));
}
}
디폴트 서블릿 : https://tomcat.apache.org/tomcat-9.0-doc/default-servlet.html
HTTP 메시지 컨버터: 요청 본문에서 메시지를 읽거나(@RequestBody), 응답 본문에 메시지 작성시(@ResponseBody) 사용 주로 의존성 추가로 컨버터 추가함
스프링부트에는 기본적으로 starter-web에 JSON용 컨버터로 Jackson2컨버터가 포함되어 있음 ObjectMapper
jasonPath 문법참고
https://github.com/json-path/JsonPath
http://jsonpath.com
스프링부트에는 XML용 컨버터가 등록되어 있지 않음 : jaxb-api, jaxb-runtime, spring-oxm, Jaxb2Marshaller
CORS 설정 : 같은 도메인에서 온 요청이 아닌경우에도 처리 허용 설정
리턴 값 핸들러 설정
Arguments Resolver 설정
뷰 컨트롤러 설정
비동기 설정
뷰 Resolver 설정
Content Negotiation 설정