如何使用spring4 @RestController返回一个jsp页面?

bla*_*Ian 6 spring spring-mvc

当我像这样使用spring3 @Controller时:

@RequestMapping("/userCenter")

@Controller
public class LoginCtrl {
    @RequestMapping("/loginPage")
    public String login(HttpServletRequest request,HttpServletResponse response,Model model) throws Exception { 
        return "userCenter/loginPage";
    }
}
Run Code Online (Sandbox Code Playgroud)

没关系,我在浏览器中获取了loginPage.jsp正确的内容.

但是当我将@Controller更改为@RestController时

localhost:8080 // userCenter/loginPage返回一个字符串为"userCenter/loginPage"的页面

那么,我如何使用@RestController来获取像@Controller这样的jsp页面?

Sot*_*lis 9

你不应该.A @RestController并不意味着返回视图.它意味着返回将直接写入响应主体的内容.

如果确实需要,可以声明方法的返回类型为StringRequestMappingHandlerAdapter#getDefaultReturnValueHandlers()返回具有标识视图名称的相应对象.


bla*_*Ian 6

实际上,@ RestController也可以返回视图...

经过一天的研究和阅读文档,我得到了一个解决方案

让我与大家分享解决方案:

首先,将控制器方法的返回类型设置为"ModelAndView"

其次,像这样设置视图路径

ModelAndView mav = new ModelAndView("userCenter/loginPage");
Run Code Online (Sandbox Code Playgroud)

最后

return mav;
Run Code Online (Sandbox Code Playgroud)

您将获得正确的jsp页面视图内容

  • 是的,你*可以*这样做,但你不应该这样做。您在这里缺少的是对 REST API 应该做什么和不应该做什么的基本理解。 (2认同)
  • 假设你需要在你的rest api上生成pdf,spring处理pdf生成的方式是通过视图,而不是消息转换器(使用响应体),所以我相信在一些特殊情况下你需要混合两者。(是的,rest api 应该只使用 json 或 xml,客户端应该负责使用提供的数据渲染 pdf,但是同样,在一些特殊的用例中,报告应该由服务器生成,即使在休息环境)。 (2认同)