0

私の Spring Boot アプリケーションでは、HAL object-mapper を に割り当てました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);
}

現在、通常の JSON シリアライゼーション/デシリアライゼーションを HAL の問題で汚染しているという懸念がありますが、これを行うための他の方法 (使用するすべてのカスタム メディア タイプを明示的に指定する以外) は考えられません。考え?

4

0 に答える 0