Whiteship Spring MVC 3/4 Configuration - Converter

2020-01-05
  • spring
  • web
  • HTTP 메시지 컨버터

    HTTP 메시지 컨버터 2부 JSON

    HTTP 메시지 컨버터 XML

    기본 HTTP 컨버터

    • 바이트배열
    • 문자열
    • Resource
    • Form (MultiVauleMap<String, String>)

    의존성에 의해 등록되는 컨버터 (WebMvcConfigurationSupport, spring boot 아님, 그냥 spring 임)

    • JAXB2
    • Jackson2
    • Jackson
    • Gson
    • Atom
    • Rss

      스프링부트는 Jsckson2 가 기본적으로 의존성에 추가되어있음.

    아래와 같은 핸들러가 있을 때,

    @GetMapping("/hello6")
    public Person hello6(@RequestBody Person person) {
        person.setAge(person.getAge()+10);
        return person;
    }
    
    @GetMapping("/hello7")
    public Animal hello7(@RequestBody Animal animal) {
        animal.setAge(animal.getAge()+10);
        return animal;
    }
    

    Accept 헤더에 따라 json 컨버터를 사용할지, xml 컨버터를 사용할지가 결정된다. json 컨버터는 스프링부트에서 기본등록을 해주고, xml 컨버터는 의존성에 의해 등록이 되는데 추가 설정을 해줘야한다.

    아래의 세 의존성과,

    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    
    <groupId>org.springframework</groupId>
    <artifactId>spring-oxm</artifactId>
    <version>${spring-framework.version}</version>
    

    설정된 빈등록을 해줘야한다.

    @Bean
    public Jaxb2Marshaller jaxb2Marshaller() {
        Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
        jaxb2Marshaller.setPackagesToScan(Animal.class.getPackage().getName());
        return jaxb2Marshaller;
    }