use*_*909 6 java spring spring-mvc hateoas spring-hateoas
使用@EnableHypermediaSupport(type = HypermediaType.HAL)Spring hateoas提供了一种简单方便的方法来启用HAL渲染.
注释触发了一些配置魔法,这里解释:https: //github.com/spring-projects/spring-hateoas#enablehypermediasupport
但是,如果您正在处理基于xml-config的弹簧应用程序,则集成@EnableHypermediaSupport并不容易.我尝试了很多不同的方法来启用HAL渲染,但没有一个解决方案正常工作:
MappingJackson2HttpMessageConverter注册一个new Jackson2HalModule()也没有用.虽然转换器用于渲染(例如渲染日期),但输出未在HAL中渲染.因此我的问题是:如何在不使用EnableHypermediaSupport的情况下启用HAL渲染?
我故意遗漏任何代码片段,因为我认为它不会有多大帮助.
也许这个问题有点老了,但我想为以下用户提供我的解决方案。
我有类似的情况(Spring MVC 3.2.10.RELEASE、Spring HATEAOS 0.16.0.RELEASE)来配置 spring hatoas 以使用超媒体而无需 java 配置。
我的解决方案如下:
创建一个自定义的 HalJacksonHttpMessageConverter (其行为类似于 Spring MVC 标准 MappingJacksonHttpMessageConverter,它还必须有一个公开 ObjectMapper 的方法),但将 application/hal+json 注册为支持的超媒体类型。如果给定的类可从 ResourceSupport 分配,supports 方法应返回 true。
在 xml 配置中创建一个 RelProvider(DefaultRelProvider 在本例中满足了我的需求)。
我创建了一个 BeanPostProcessorBean (实现的接口:BeanPostProcessor 和 BeanFactoryAware)。使用以下设置丰富我的 HalJachsonHttpMessageConverter 中的现有 ObjectMapper:
// retrieve the object mapper from the messageConverter
RelProvider provider = beanFactory.getBean("relProvider", RelProvider.class);
ObjectMapper mapper = (ObjectMapper) objectMapper;
mapper.registerModule(new Jackson2HalModule());
mapper.setHandlerInstantiator(new Jackson2HalModule.HalHandlerInstantiator(provider, null));
mapper.enable(SerializationFeature.INDENT_OUTPUT);
Run Code Online (Sandbox Code Playgroud)
在您的 spring bean xml 中注册这些 bean。我希望这有帮助。如果有人有更好的配置方法,请告诉我。
| 归档时间: |
|
| 查看次数: |
7682 次 |
| 最近记录: |