
场景及需求: 项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。
例如: [ { "id": 1, "name": null }, { "id": 2, "name": "xiaohong" } ]
如上,格式化后的返回内容应该为: [ { "id": 1, "name": "" }, { "id": 2, "name": "xiaohong" } ]
这里直接给出解决方案代码,这里支持FastJson和Jackson配置序列化的方式:
@Configuration
public class WebCatMvcConfiguration extends WebMvcConfigurationSupport {
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(new ToStringSerializer(Long.TYPE));
module.addSerializer(new ToStringSerializer(Long.class));
module.addSerializer(new ToStringSerializer(BigInteger.class));
objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("");
}
});
objectMapper.registerModule(module);
converter.setObjectMapper(objectMapper);
//这里是fastJSON的配置方式,更多的内容可以查看SerializerFeature
// FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
// converter.setFeatures(SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullNumberAsZero,
// SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullListAsEmpty);
converters.add(converter);
}}最后我们也可以了解一下:WebMvcConfigurationSupport类 下面是它的官方文档描述:
public class WebMvcConfigurationSupport
extends Object
implements ApplicationContextAware, ServletContextAwareThis is the main class providing the configuration behind the MVC Java config. It is typically imported by adding @EnableWebMvc to an application@Configuration class. An alternative more advanced option is to extend directly from this class and override methods as necessary remembering to add@Configuration to the subclass and @Bean to overridden @Bean methods. For more details see the Javadoc of @EnableWebMvc.
This class registers the following HandlerMappings:
RequestMappingHandlerMapping ordered at 0 for mapping requests to annotated controller methods.HandlerMapping ordered at 1 to map URL paths directly to view names.BeanNameUrlHandlerMapping ordered at 2 to map URL paths to controller bean names.HandlerMapping ordered at Integer.MAX_VALUE-1 to serve static resource requests.HandlerMapping ordered at Integer.MAX_VALUE to forward requests to the default servlet.Registers these HandlerAdapters:
RequestMappingHandlerAdapter for processing requests with annotated controller methods.HttpRequestHandlerAdapter for processing requests with HttpRequestHandlers.SimpleControllerHandlerAdapter for processing requests with interface-based Controllers.Registers a HandlerExceptionResolverComposite with this chain of exception resolvers:
ExceptionHandlerExceptionResolver for handling exceptions through @ExceptionHandler methods.ResponseStatusExceptionResolver for exceptions annotated with @ResponseStatus.DefaultHandlerExceptionResolver for resolving known Spring exception typesRegisters an AntPathMatcher and a UrlPathHelper to be used by:
RequestMappingHandlerMapping,HandlerMapping for ViewControllersHandlerMapping for serving resourcesNote that those beans can be configured with a PathMatchConfigurer.
Both the RequestMappingHandlerAdapter and the ExceptionHandlerExceptionResolver are configured with default instances of the following by default:
ContentNegotiationManagerDefaultFormattingConversionServiceOptionalValidatorFactoryBean if a JSR-303 implementation is available on the classpathHttpMessageConverters depending on the third-party libraries available on the classpath.