Java 我可以在同一个URI上配置HTML和Spring数据REST 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,还有其

我正在用SpringMVC编写一个web应用程序

遵循REST原则,我希望在应用程序中为相同的资源使用一致的URI,并使用内容协商来选择是返回HTML还是JSON。在浏览器中访问
/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()
    );

}