当我像这样使用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页面?
答案 0 :(得分:7)
你不应该。 @RestController
并不意味着返回视图。它意味着返回将直接写入响应主体的内容。
如果确实需要,可以声明方法的返回类型为View
或ModelAndView
,并返回具有标识视图名称的相应对象。
答案 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;
}