2017-05-12 1 views
1

Nous utilisons le dernier Spring 4.2.x et nous sommes récemment passés de Jackson Mapper 2.6.3 à 2.8.8, et maintenant nous enregistrons des modules.Spring et MappingJackson2HttpMessageConverter et registerModule

Voici une partie de ce ou printemps-servlet.xml ressemble:

<mvc:annotation-driven> 
    <mvc:message-converters register-defaults="true"> 
     <bean 
      class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
      <property name="objectMapper"> 
       <bean class="com.fasterxml.jackson.databind.ObjectMapper"> 
        <property name="dateFormat"> 
         <bean class="java.text.SimpleDateFormat"> 
          <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg> 
         </bean> 
        </property> 
       </bean> 
      </property> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

et voici ce que nous nous dans le code pour mapper un fichier JSON:

  ObjectMapper mapper = new ObjectMapper(); 
    mapper.registerModule(new ParameterNamesModule()); 
    mapper.registerModule(new Jdk8Module()); 
    mapper.registerModule(new JavaTimeModule()); 

Alors, ce que je J'aime faire est de configurer le "spring-servlet" et "MappingJackson2HttpMessageConverter" afin que je puisse ajouter les modules à enregistrer.

Oui, nous n'avons pas encore utilisé @Configuration, nous utilisons toujours le XML, ce qui ne me dérange pas du tout.

Merci pour toute aide!

Répondre

1

Ainsi, après quelques essais et de tâtonnements, nous sommes arrivés avec un SpringMVC-servlet.xml qui ressemble à:

<context:annotation-config /> 
<context:component-scan base-package="com.tomholmes.mycode.core.server.controller" /> 

<mvc:annotation-driven> 
    <mvc:message-converters register-defaults="true"> 
     <bean 
      class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
      <property name="objectMapper" ref="objectMapper" /> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

<bean id="objectMapper" 
    class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> 

    <property name="featuresToDisable"> 
     <array> 
      <util:constant 
       static-field="com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS" /> 
     </array> 
    </property> 

    <property name="dateFormat"> 
     <bean class="java.text.SimpleDateFormat"> 
      <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg> 
     </bean> 
    </property> 

    <property name="modulesToInstall" 
     value=" 
     com.fasterxml.jackson.datatype.jdk8.Jdk8Module, 
    com.fasterxml.jackson.datatype.jsr310.JavaTimeModule, 
    com.fasterxml.jackson.module.paramnames.ParameterNamesModule" /> 
</bean> 

<bean id="jsonHttpMessageConverter" 
    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
    <property name="supportedMediaTypes" value="application/json" /> 
    <property name="objectMapper" ref="objectMapper" /> 
</bean> 

<bean 
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonHttpMessageConverter" /> 
     </list> 
    </property> 
</bean> 

Cette configuration semblait faire l'affaire.