MappingJackson2HttpMessageConverter Java Spring Boot

问题描述 投票:0回答:1

是否可以在同一个 Spring Boot 应用程序中为 MappingJackson2HttpMessageConverter 配置两个 bean?

我在一家公司工作,默认配置是从 dto 属性中删除 null 值,但我的应用程序需要某些 api 中的 dto 中的 null 值,而其他 api 我需要默认配置。

default configuration like this:

@Configuration
public class objectMapperConfig {

    @Bean
    @Primary
    public ObjectMapper defaultObjectMapperConfig() {
        objectMapper.setSerializationInclusion(Include.NON_NULL);
        objectMapper.setDefaultPropertyInclusion(JsonInclude.Value.construct(Include.NON_EMPTY,
                Include.NON_EMPTY));
        return objectMapper;
    }
}

the second object mapper like this:

@Configuration
public class ReportObjectMapperConfig {

    @Bean("customObjectMapper")
    public ObjectMapper customObjectMapper() {
        objectMapper.setSerializationInclusion(Include.USE_DEFAULTS);
        objectMapper.setDefaultPropertyInclusion(JsonInclude.Value.construct(Include.USE_DEFAULTS,
                Include.USE_DEFAULTS));
        return objectMapper;
    }
}


I am trying to write my configuration like this

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;

@Configuration
public class WebMvcConfig {

    private ObjectMapper defaultObjectMapper;
    private ObjectMapper customObjectMapper;

    public WebMvcConfig(ObjectMapper defaultObjectMapper,
            @Qualifier("customObjectMapper") ObjectMapper customObjectMapper) {
        this.defaultObjectMapper = defaultObjectMapper;
        this.customObjectMapper = customObjectMapper;
    }

    @Bean("defaultHttpMessageConverter")
    public MappingJackson2HttpMessageConverter defaultMappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(defaultObjectMapper);
        return converter;
    }

    @Bean("customHttpMessageConverter")
    public MappingJackson2HttpMessageConverter customMappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(customObjectMapper);
        return converter;
    }
}

如果我做错了什么或错过了什么,有什么见解吗?

java spring spring-mvc
1个回答
0
投票

响应是通过不同的类实现的吗?我建议使用单个

ObjectMapper
,但在 DTO 或空时必须存在的字段上使用
@JsonInclude
注释。

© www.soinside.com 2019 - 2024. All rights reserved.