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


问题内容

当我像这样使用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页面?


问题答案:

你不应该 A @RestController并不意味着通过String返回类型/值返回视图名称。它的目的是返回将直接写入响应主体的内容。

更具体地说(在一般配置情况下),Spring
MVC在中配置其返回值处理程序RequestMappingHandlerAdapter#getDefaultReturnValueHandlers()。如果您查看该实现,则String视图名称的处理程序将在(确实)的处理程序
之后*ViewNameMethodReturnValueHandler注册。

*@RestController``@ResponseBody``RequestResponseBodyMethodProcessor

如果确实需要,则可以声明您的方法的返回类型为ViewModelAndView(在ViewMethodReturnValueHandlerModelAndViewMethodReturnValueHandler之前注册了这些和的处理程序RequestResponseBodyMethodProcessor),并返回具有标识视图名称的适当对象。