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