gpt4 book ai didi

java - 我可以在同一个 URI 上配置 HTML 和 Spring Data REST JSON 吗?

转载 作者:行者123 更新时间:2023-12-02 12:52:03 26 4
gpt4 key购买 nike

我正在使用 Spring MVC 编写一个 Web 应用程序。

遵循 REST 原则,我希望在应用程序中对相同资源使用一致的 URI,并使用内容协商来选择是返回 HTML 还是 JSON。在浏览器中访问 /people/bob 应该会显示他的个人资料页面,使用 curl 获取它应该会给我一个 JSON 表示。

但是,because of a semantic limitation (bug?) in the RequestMappingHandlerMapping ,如果我在匹配的 URI 上定义任何显式 Controller (例如 HTML Controller ),我就无法“落入”通用 Spring Data REST 映射。除了为每个匹配的 HTML Controller 手动实现 @RestRepositoryController 之外,还有其他简单的方法可以使 Spring MVC 在 HTML 和 JSON 映射之间进行内容协商吗?

<小时/>

无效的映射示例:

@BasePathAwareController
class PersonHtmlController {
@GetMapping(path = '/people/{id}', produces = 'text/html')
ModelAndView person(@PathVariable Person id) {
new ModelAndView('person', [person: id])
}
}

这会产生预期的 HTML 输出,但当我请求 JSON 时返回 406 Not Acceptable。

最佳答案

你可以去contentnegotiatingviewresolver 。以下是一个示例。

@RequestMapping(value = "/users", method = RequestMethod.GET)
public ModelAndView userDetails() {

ModelAndView modelAndView = new ModelAndView();
List userDetails = userService.getUserDetails();
modelAndView.addObject("users", userDetails);
modelAndView.setViewName("userDetails");
return modelAndView;

}

因此,每当请求带有 /users 时,就会提供 html 页面,当请求带有 /users.json 时,就会生成 JSON 响应。

您可以通过扩展 Spring 提供的 WebMvcConfigurerAdapter 来重写以下方法,以如下方式进行配置。

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {

registry.jsp("/WEB-INF/jsp/", ".jsp").viewClass(JstlView.class);
registry.enableContentNegotiation(
new MappingJackson2JsonView()
);

}

希望这有帮助。引用: contentnegotiating view resolver example

关于java - 我可以在同一个 URI 上配置 HTML 和 Spring Data REST JSON 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43772444/

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