0

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

4

0 回答 0