[Spring Boot] Resource load 관련

2018. 6. 8. 16:58·Development/Java
반응형

spring boot로 개발을 하다보면, ObjectMapper(MessageConverter)를 커스터마이징을 하기 위해 Config를 설정하는 경우가 있다.



@Configuration
public class CommonConfig extends WebMvcConfigurationSupport {

    @Override
    public void configureMessageConverters(List converters) {

        final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        final ObjectMapper objectMapper = new ObjectMapper();

        // ObjectMapper Settings(JODA)
//        objectMapper.registerModule(new JodaModule());
        objectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.
                WRITE_DATES_AS_TIMESTAMPS, true);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
        objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
        converter.setObjectMapper(objectMapper);

        builder.serializationInclusion(JsonInclude.Include.NON_NULL);
        builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);

        // Add settings to converter, builder
        converters.add(converter);
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
    }
}


이렇게 설정하면 ObjectMapper가 생성될 때 여러 설정들이 세팅되고, Spring 내부에서 사용하는 MessageConverter에 등록이 된다.


필요한 모듈등(Joda-time ..) 이나 JSON 필드가 없을때 동작 등등을 설정할 수 있다.


근데, 이 WebMvcConfigurationSupport를 상속받아서 사용을 하게 되면 Template(freemarker, velocity ...) 에서 사용하는 리소스 폴더를 못찾는다는 에러가 나온다


즉, 위의 설정만 가지고 index 페이지던 어디던 가보면 다 404 NOT FOUND가 떨어질 것이다.


이유는 즉슨 WebMvcConfigurationSupport에는 원래 리소스 폴더를 매핑하는 부분이 있는데, 상속해버리면 이 부분이 잘 동작하지 않는듯하다




@Configuration
public class CommonConfig extends WebMvcConfigurationSupport {

    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
            "classpath:/META-INF/resources/", "classpath:/resources/",
            "classpath:/static/", "classpath:/public/" };

    @Override
    public void configureMessageConverters(List converters) {

        final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        final ObjectMapper objectMapper = new ObjectMapper();

        // ObjectMapper Settings(JODA)
//        objectMapper.registerModule(new JodaModule());
        objectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.
                WRITE_DATES_AS_TIMESTAMPS, true);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
        objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
        converter.setObjectMapper(objectMapper);

        builder.serializationInclusion(JsonInclude.Include.NON_NULL);
        builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);

        // Add settings to converter, builder
        converters.add(converter);
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
    }
}


그래서 위와 같이 리소스 폴더가 있는 부분을 매핑해주는 설정이 필요하다.


리소스의 위치를 적은 String[] 배열을 만들고 그걸 ResourceHandlerRegistry에 add 시켜주면 된다.

반응형
저작자표시 동일조건 (새창열림)

'Development > Java' 카테고리의 다른 글

[JAVA] 랜덤 퍼센트 계산하는 클래스(?)  (0) 2018.06.08
[Spring boot] Websocket connect / disconnect 관련  (0) 2018.06.08
[Spring Boot] Spring Security maximumSessions 관련  (0) 2018.06.08
SpringBoot Jackson(ObjectMapper) Config  (0) 2017.07.07
[Spring] @Valid Collection Validation 관련  (3) 2017.06.22
'Development/Java' 카테고리의 다른 글
  • [JAVA] 랜덤 퍼센트 계산하는 클래스(?)
  • [Spring boot] Websocket connect / disconnect 관련
  • [Spring Boot] Spring Security maximumSessions 관련
  • SpringBoot Jackson(ObjectMapper) Config
@곰팡
@곰팡
Java Backend Developer
  • @곰팡
    곰팡이 먼지연구소
    @곰팡
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • Daily Life (1)
        • 잡담 (1)
      • IT기업 입사 (0)
      • Development (52)
        • Java (24)
        • Spring (6)
        • Web (3)
        • OS (6)
        • Algorithm (4)
        • 이것저것 끄적끄적 (3)
        • Netty & FlatBuffers (3)
        • Database (2)
        • Dev-ops, Monitoring (1)
      • Labatory (0)
        • Test Bed 1 (0)
  • 블로그 메뉴

    • 메인
    • 카테고리
    • 태그
    • 방명록
    • 글 작성
    • 관리자
  • 링크

    • linkedIn
    • github
  • 공지사항

  • 인기 글

  • 태그

    kitakyusu
    고쿠라역
    기타큐슈
    springboot
    java
    HashMap
    일본여행
    prometheus
    일본
    고쿠라
    Spring Boot
    皿倉山
    北九州
    flatbuffer
    타코야끼
    자바
    linux
    북큐슈
    Spring
    해외여행
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
@곰팡
[Spring Boot] Resource load 관련
상단으로

티스토리툴바