사용자 도구

사이트 도구


springframework:springboot:mvc

SpringBoot and Spring Web MVC

설정 커스터마이즈

  • WebMvcConfigurerAdapter 를 구현하고 @Configuration을 등록하면 여러가지 옵션을 override 할 수 있다.
  • Spring 5 에서는 Java 8 의 default 지원으로 WebMvcConfigurerAdapter가 deprecated 되었다.
  • WebMvcRegistrations 구현으로 몇가지 Handler 등록.
  • @EnableWebMvc를 활성화 하면 일반 Spring MVC 모드가 되어 Auto Configuration이 안먹게 된다.
    • 이 경우 WebMvcConfigurationSupport Bean이 등록되는데 이 Bean이 존재하면 Auto Configuration 이 중단된다.
    • 즉, SpringBoot 에서는 org.springframework.boot:spring-boot-starter-web 의존성이 걸려있다면 @EnableWebMvc를 설정하지 말라.

@WebMvcTest 가 잘되게 하려면

  • SpringBoot Test@WebMvcTest는 WebMvc 관련 설정만 읽고 나머지 컴포넌트에 대한 설정은 읽지 않는데, 이 때문에 WebMvc 관련 설정(WebMvcConfigurer)가 다른 컴포넌트를 import 하는 설정들과 섞여 있으면 컨텍스트를 올바로 설정하지 못한다.
  • 따라서 WebMvc 관련 설정(특히 WebMvcConfigurer)들은 다른 컴포넌트들의 설정과 분리해 두도록 한다.

Formatter

  • Controller 파라미터로 들어온 문자열을 객체로 변환해주는 전역 설정.
  • Formatter 인터페이스 구현. Formatter의 상속 클래스들도 모두 살펴볼 것.
  • 날짜의 경우 @DateTimeFormat 애노테이션으로 모든 파라미터마다 설정해주는 것도 가능하지만 공통 전역 설정으로 Date, LocalDate, LocalDateTime 을 만들어두는게 좋음.
  • WebMvcConfigurer addFormatters로 등록.
  • Formatter와 Jackson Serializers/Deserializers 에 대해서 테스트를 만들어 보증하는 것이 좋다. FormatterSerializerTestControllerTest.groovy

Java 8 java.time.* Formatter 일괄 등록

@Configuration
public class MyApiWebMvcConfig  implements WebMvcConfigurer {
 
    @Override
    public void addFormatters(FormatterRegistry registry) {
        DateTimeFormatterRegistrar dateTimeFormatterRegistrar = new DateTimeFormatterRegistrar();
        dateTimeFormatterRegistrar.setUseIsoFormat(true); // ISO 포맷 사용시, 그게 아니면 각자 명시적 설정
        dateTimeFormatterRegistrar.registerFormatters(registry);
    }
}

Converter

springframework/springboot/mvc.txt · 마지막으로 수정됨: 2020/07/17 10:21 저자 kwon37xi