在我的Spring Boot应用程序中,我已将HAL对象映射器分配给MappingJackson2HttpMessageConverter
。这是因为我的自定义媒体类型以+json
结尾,最终被默认转换器识别。 Spring HATEOAS注册的自定义MappingJackson2HttpMessageConverter
实例仅识别application/hal+json
。我的自定义媒体类型的格式为application/vnd.service.entity.v1.hal+json
,默认实例可识别(因为它支持application/json
和application/*+json
)。但是,默认实例不会将链接正确序列化为HAL约定。我已经能够通过注册映射器来解决它:
@Bean
public HttpMessageConverters customConverters() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(
new MediaType("application", "json", Charset.defaultCharset()),
new MediaType("application", "*+json", Charset.defaultCharset()),
new MediaType("application", "hal+json")
));
ObjectMapper halObjectMapper = beanFactory.getBean(HAL_OBJECT_MAPPER_BEAN_NAME, ObjectMapper.class);
converter.setObjectMapper(halObjectMapper);
return new HttpMessageConverters(converter);
}
有人担心我现在正在使用HAL问题污染常规JSON序列化/反序列化,但我想不出任何其他方式(没有明确指定我使用的每个自定义媒体类型)来执行此操作。想法?