在我的 Spring Boot 应用程序中,我已将 HAL 对象映射器分配给MappingJackson2HttpMessageConverter
. 这是因为我的自定义媒体类型以默认转换器结束+json
并最终被默认转换器识别。MappingJackson2HttpMessageConverter
Spring HATEOAS 注册的自定义实例只识别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 序列化/反序列化,但我想不出任何其他方式(除了明确指定我使用的每个自定义媒体类型)来做到这一点。想法?