Вопрос по spring, java – Как настроить MappingJacksonHttpMessageConverter при использовании конфигурации на основе весенних аннотаций?

29

Я был достаточно неразумен, чтобы заняться настройкой весенних компонентов с помощью аннотаций, а не чисто XML-компонентов, и теперь я столкнулся с последствиями.

Я настраиваю каналы REST, используя

<mvc:annotation-driven />

Теперь я хочу просто настроитьMappingJacksonHttpMessageConverter выводить в JSON только те поля, которые имеют ненулевые значения. Я пробовал следующее:

<bean id="jsonHttpMessageConverter"
    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="prefixJson" value="false" />
    <property name="supportedMediaTypes" value="application/json" />
    <property name="objectMapper">
        <bean class="org.codehaus.jackson.map.ObjectMapper">
            <property name="serializationInclusion" value="NON_NULL"/>
        </bean>
    </property>
</bean>

Бины создаются, но в каналах создается и используется другой экземпляр конвертера. Итак, я пробовал способ@Configuration а также@Bean описано вэтот вопрос Stackoverflow, но все же сериализация json использует свою собственную конфигурацию.

Наконец, я попытался ввести маппер через

@Autowired
private MappingJacksonHttpMessageConverter jacksonConverter;

но я закончил сNoSuchBeanDefinitionException, Так что теперь у меня нет выбора, и поэтому я прошу любые идеи здесь. Как контролировать и настраивать маппер, используемый фреймворком?

Попробуйте изменить имя проводного поля наjsonHttpMessageConverter лайк@Autowired private MappingJacksonHttpMessageConverter jsonHttpMessageConverter; Ahamed Mustafa M

Ваш Ответ

3   ответа
0

где необходимо было обратитьсяfetch=FetchType.LAZY добавив модуль к конвертерам Джексона. Подобная техника может быть использована для модификации преобразователей любым способом, включая удаление и восстановление.

@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {

@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {

    for (HttpMessageConverter<?> mc : converters){
         if (mc instanceof MappingJackson2HttpMessageConverter || mc instanceof MappingJackson2XmlHttpMessageConverter) {
            ((AbstractJackson2HttpMessageConverter) mc).getObjectMapper().registerModule(new Hibernate5Module());
        }
    }
    return;
 }

В этом случае,

the WebMvcConfigurerAdapter has a lot of other configuration in it and I wanted to avoid another configuration class. Using extendMessageConverters enabled access to the automatically-configured Jackson classes without losing the configuration of all other message converters, which is what configureMessageConverters would have done. Using registerModuleyou can simply add the needed Hibernate5Module to the existing converters. The module was added to both the JSON and XML processors
26

ть выполнена несколькими способами.

Самым простым кажется продлить@Configuration аннотированный класс сWebMvcConfigurerAdapter:

@Configuration
@EnableWebMvc
public class ApplicationSpringConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureMessageConverters( List<HttpMessageConverter<?>> converters ) {
        converters.add(converter());
    }

    @Bean
    MappingJackson2HttpMessageConverter converter() {
        // [...]
    }
}

Обратите внимание, что это очень похоже на пример, предоставленный ответомTomasz Nurkiewicz.

Однако используяWebMvcConfigurationSupport вместоWebMvcConfigurerAdapter больше подходит для расширенных настроек. Это было в том случае, если вам нужно было также добавить конвертеры по умолчанию.

Смотрите документацию SpringНастройка предоставленной конфигурации

Error: User Rate Limit Exceededconverter()Error: User Rate Limit Exceeded@Bean?
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded@BeanError: User Rate Limit Exceeded
57

WebMvcConfigurer.configureMessageConverters() метод:

Configure the HttpMessageConverters to use [...] If no message converters are added to the list, default converters are added instead.

С@Configuration у тебя есть:

@Configuration
class MvcConf extends WebMvcConfigurationSupport {
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(converter());
        addDefaultHttpMessageConverters(converters);
    }

    @Bean
    MappingJacksonHttpMessageConverter converter() {
        MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter()
        //do your customizations here...
        return converter;
    }
}

ПозвонитьaddDefaultHttpMessageConverters() требуется, потому что по умолчанию не применяются при использовании пользовательских преобразователей.

IMPORTANT NOTE  Вы должны удалить@EnableWebMvc чтобы ваши конвертеры были настроены, если вы расширяете WebMvcConfigurationSupport.

Error: User Rate Limit ExceededWebMvcConfigurationSupportError: User Rate Limit ExceededWebMvcConfigurerAdapterError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Danubian Sailor
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededversionsError: User Rate Limit Exceeded

Похожие вопросы