gpt4 book ai didi

java - 如何在不使用带有 spring hateoas 的@EnableHypermediaSupport 的情况下启用 HAL 渲染?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:35 25 4
gpt4 key购买 nike

通过 @EnableHypermediaSupport(type = HypermediaType.HAL) Spring hateoas 提供了一种简单方便的方式来启用 HAL 渲染。

注解触发了一些配置魔法,解释如下: https://github.com/spring-projects/spring-hateoas#enablehypermediasupport

但是,如果您正在处理给定的基于 xml-config 的 spring 应用程序,则集成 @EnableHypermediaSupport 并不容易。我尝试了很多不同的方法来启用 HAL 渲染,但没有一个解决方案可以正常工作:

  • 在现有的 mvc servlet xml 配置中包含一个配置类。
  • 使用不同版本的 spring hateos(0.70.0、0.80.0、0.9.0.BUILD-SNAPSHOT),希望 0.90.0 能够立即生成 HAL,因为根据 jira 问题,它应该成为默认渲染(至少对于 spring data rest)。
  • 使用自定义 MappingJackson2HttpMessageConverter 注册一个 new Jackson2HalModule() 也不起作用。虽然转换器用于渲染(例如渲染日期),但输出未在 HAL 中渲染。

因此我的问题是:如何在不使用 EnableHypermediaSupport 的情况下启用 HAL 渲染?

我有意省略了任何代码片段,因为我认为这不会有太大帮助。

最佳答案

基于 @WaldemarSchneider answer , 这是一个具体的操作方法:

创建 HTTP 消息转换器:

public class HalHttpMessageConverter extends AbstractJackson2HttpMessageConverter {

public HalHttpMessageConverter() {
super(new ObjectMapper(), new MediaType("application", "hal+json", DEFAULT_CHARSET));
objectMapper.registerModule(new Jackson2HalModule());
objectMapper.setHandlerInstantiator(new Jackson2HalModule.HalHandlerInstantiator(new DefaultRelProvider(), null));
// customize your mapper if needed
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
}

@Override
protected boolean supports(Class<?> clazz) {
return ResourceSupport.class.isAssignableFrom(clazz);
}

}

在您的 servlet 上下文中注册它:

<mvc:annotation-driven>
<mvc:message-converters>
<bean class="package.to.HalHttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>

并且不要忘记让您的其余 Controller 生成application/hal+json:

@RestController
@RequestMapping(value = "/articles", produces = "application/hal+json")
public class ArticleRestController {
...
}

关于java - 如何在不使用带有 spring hateoas 的@EnableHypermediaSupport 的情况下启用 HAL 渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21040951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com