Java 我可以在同一个URI上配置HTML和Spring数据REST JSON吗?
我正在用SpringMVC编写一个web应用程序 遵循REST原则,我希望在应用程序中为相同的资源使用一致的URI,并使用内容协商来选择是返回HTML还是JSON。在浏览器中访问Java 我可以在同一个URI上配置HTML和Spring数据REST JSON吗?,java,spring,spring-mvc,spring-data,spring-data-rest,Java,Spring,Spring Mvc,Spring Data,Spring Data Rest,我正在用SpringMVC编写一个web应用程序 遵循REST原则,我希望在应用程序中为相同的资源使用一致的URI,并使用内容协商来选择是返回HTML还是JSON。在浏览器中访问/people/bob应该会显示他的个人资料页面,使用curl获取该页面应该会给我一个JSON表示 但是,如果我在匹配的URI上定义任何显式控制器(如HTML控制器),我就不能“忽略”到通用的Spring数据REST映射。除了为每个匹配的HTML控制器手动实现一个@RestRepositoryController,还有其
/people/bob
应该会显示他的个人资料页面,使用curl
获取该页面应该会给我一个JSON表示
但是,如果我在匹配的URI上定义任何显式控制器(如HTML控制器),我就不能“忽略”到通用的Spring数据REST映射。除了为每个匹配的HTML控制器手动实现一个@RestRepositoryController
,还有其他简单的方法让Spring MVC内容在HTML和JSON映射之间进行协商吗
不起作用的映射示例: 这将生成预期的HTML输出,但在请求JSON时返回406,这是不可接受的。您可以选择。下面是一个例子
@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提供的WebMVCConfigureAdapter来覆盖下面的方法,以下面的方式配置它
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/jsp/", ".jsp").viewClass(JstlView.class);
registry.enableContentNegotiation(
new MappingJackson2JsonView()
);
}
希望这有帮助。
参考:
您是否已尝试按照建议覆盖
WebMVCConfigureAdapter$configureContentNegotiation
?(另一个例子是可用的)。@MarcTarin这都是通过Boot正确自动配置的。这与我要问的问题无关,这是映射阶段,而不是视图解析。
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/jsp/", ".jsp").viewClass(JstlView.class);
registry.enableContentNegotiation(
new MappingJackson2JsonView()
);
}