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

时间:2014-09-25 05:32:17

标签: 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";
    }
}

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

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

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

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

5 个答案:

答案 0 :(得分:7)

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

如果确实需要,可以声明方法的返回类型为ViewModelAndView,并返回具有标识视图名称的相应对象。

答案 1 :(得分:6)

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

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

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

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

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

ModelAndView mav = new ModelAndView("userCenter/loginPage");

最后

return mav;

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

答案 2 :(得分:0)

检查@RestController的API文档,它使用@ResponseBody本身进行注释,这表明方法返回值应该绑定到Web响应主体。配置的视图对象永远不会起作用,因此无法映射到任何视图。 我的问题是你为什么要使用RestController,它不是要映射到任何视图?

答案 3 :(得分:0)

@RestController自动为每个主体配置@ResponseBody,这意味着它被设计为在输出上写入所有内容而不是返回视图。如果您想要返回视图,请使用@Controller配置另一个类并相应地返回视图

答案 4 :(得分:0)

与@RestController结合使用仍可用于为您的REST Api创建重定向回退

@GetMapping("/**")
public ModelAndView Default()
{
    ModelAndView mav = new ModelAndView("redirect:/actuator/health");
    return mav;
}