由于从Spring 5.0开始不推荐使用WebMvcConfigurerAdapter,因此我将其更改为WebMvcConfigurationSupport,但在响应中却得到了空值。
{
"key": null,
"value": null,
"name":"test"
}
如果将其更改回WebMvcConfigurerAdapter,则会得到预期的响应:
{
"name":"test"
}
春季版本:5.7.0 杰克逊版本:2.9.7
我用Google搜索了很多东西,但还是没有运气。我不想使用不推荐使用的类。 尝试在添加WebMvcConfigurationSupport后删除@EnableWebMvc注释,因为这不是必需的。
我重写了configureMessageConverters,在其中设置了包含NOT_NULL的MappingJackson2HttpMessageConverter
@Configuration
@EnableAspectJAutoProxy
@EnableSwagger2
@PropertySource("classpath:test.properties")
@ComponentScan(basePackages = {"com.test.web"})
public class UmwWebConfig extends WebMvcConfigurationSupport {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
ByteArrayHttpMessageConverter bahHumbug = new ByteArrayHttpMessageConverter();
bahHumbug.setSupportedMediaTypes(Collections.singletonList(MediaType.parseMediaType("application/pdf")));
converters.add(bahHumbug);
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.getFactory().configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
converter.setObjectMapper(objectMapper);
converters.add(converter);
super.configureMessageConverters(converters);
}
想要从响应中删除空字段。如果配置有任何问题,请告诉我。
答案 0 :(得分:1)
请勿扩展WebMvcConfigurationSupport
,因为这不等同于扩展已弃用的WebMvcConfigurerAdapter
。
代替实施WebMvcConfigurer
,这也是javadoc of `WebMvcConfigurerAdapter的弃用文档中建议的。
已弃用。 从
WebMvcConfigurer
开始,@Configuration @EnableAspectJAutoProxy @EnableSwagger2 @EnableWebMvc @PropertySource("classpath:test.properties") @ComponentScan(basePackages = {"com.test.web"}) public class UmwWebConfig implements WebMvcConfigurer { ... }
具有默认方法(由Java 8基准实现),可以直接实现而无需此适配器
因此您的配置类标题应该看起来像这样
@EnableWebMvc
您需要再次添加Jackson2ObjectMapperBuilder
(它应该`并重写/实现您需要使用的接口方法。在这种情况下,可能只有一个。)
PRO-TIP :使用ObjectMapper
构建MappingJackson2HttpMessageConverter
并使用ObjectMapper
的构造函数。这样可以省去创建额外的@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
ByteArrayHttpMessageConverter bahHumbug = new ByteArrayHttpMessageConverter();
bahHumbug.setSupportedMediaTypes(Collections.singletonList(MediaType.parseMediaType("application/pdf")));
converters.add(bahHumbug);
final ObjectMapper objectMapper =
Jackson2ObjectMapperBuilder.json()
.serializationInclusion(JsonInclude.Include.NON_NULL)
.failOnUnknownProperties(true)
.featuresToEnable(JsonGenerator.Feature.ESCAPE_NON_ASCII)
.build();
converters.add(new MappingJackson2HttpMessageConverter(objectMapper);
super.configureMessageConverters(converters);
}
(在默认构造函数中发生)的麻烦。
$StockData | convertfrom-csv | convertto-json | ConvertFrom-Json -AsHashtable