Как добавить Jdk8Module на ObjectMapper для Джексона - PullRequest
0 голосов
/ 11 октября 2019

Я использую Джексон 2.9.6. У меня есть контроллер, в котором я пытаюсь отправить дополнительный в качестве одного из моих полей. Когда я получаю ответ от контроллера, я всегда получаю его в этом формате {"field":{"present":true}} (как показано в этом вопросе ).

По сути, я настроил bean-компонент RestTemplate следующим образом:

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </list>
    </property>
</bean>

И я хотел бы добавить модуль Jdk8Module как часть процесса сериализации. Я заметил, что есть конструктор MappingJackson2HttpMessageConverter(ObjectMapper mapper), который принимает ObjectMapper, и я подумываю о создании bean-компонента ObjectMapper, в котором будет зарегистрирован Jdk8Module (с помощью открытого метода registerModule(Module module), найденного в классе ObjectMapper), поэтому я могупередайте этот модуль следующим образом:

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <constructor-arg name="objectMapper" ref="ObjectMapperWithJDK8Bean"></constructor-arg>
            </bean>
        </list>
    </property>
</bean>

<bean id="ObjectMapperWithJDK8Bean" class="com.fasterxml.jackson.databind.ObjectMapper">
* Pass in com.fasterxml.jackson.datatype.jdk8.Jdk8Module here via the method *
</bean>

Но проблема, стоящая перед ним на данный момент, заключается в том, как вызвать метод registModule из файла xml при создании компонента? Я использую Spring 4.1. Я новичок в весне, так что это довольно сложно!

1 Ответ

3 голосов
/ 11 октября 2019

Вы можете создать bean-компонент с конфигурацией java вместо xml, например:

@Configuration
public class GeneralConfiguration { 
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper()
           .registerModule(new ParameterNamesModule())
           .registerModule(new Jdk8Module())
           .registerModule(new JavaTimeModule());
        return mapper;
    }
}

Я считаю, что аннотации @Configuration и @Bean доступны начиная с spring 3.0 , так что вымог бы использовать их без каких-либо проблем. Если вы все еще хотите продолжить настройку на основе xml, тогда:

<bean id="objectMapper"
    class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
    <property name="modulesToInstall"
        value="
        com.fasterxml.jackson.datatype.jdk8.Jdk8Module,
        com.fasterxml.jackson.datatype.jsr310.JavaTimeModule,
        com.fasterxml.jackson.module.paramnames.ParameterNamesModule" />
</bean>

Чтение doc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...