私の Spring Boot アプリケーションでは、HAL object-mapper を に割り当てましたMappingJackson2HttpMessageConverter。これは、カスタム メディア タイプ+jsonがデフォルト コンバーターで終了し、最終的に認識されるためです。MappingJackson2HttpMessageConverterSpring 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);
}
現在、通常の JSON シリアライゼーション/デシリアライゼーションを HAL の問題で汚染しているという懸念がありますが、これを行うための他の方法 (使用するすべてのカスタム メディア タイプを明示的に指定する以外) は考えられません。考え?