When I use spring3 @Controller like this:
@RequestMapping("/userCenter")
@Controller
public class LoginCtrl {
@RequestMapping("/loginPage")
public String login(HttpServletRequest request,HttpServletResponse response,Model model) throws Exception {
return "userCenter/loginPage";
}
}
It is ok, I get the the loginPage.jsp right content in browser.
but when I change @Controller to @RestController
the localhost:8080//userCenter/loginPage return a page with the string "userCenter/loginPage"
So,how could I use @RestController to get jsp pages like @Controller?
If you want to return a view, configure another class with @Controller and return that view accordingly. Show activity on this post. @RestController actually returns the HTTP response as JSON or XML only. @RestController is internally annotated with @ResponseBody.
@RestController is not meant to be used to return views to be resolved. It is supposed to return data which will be written to the body of the response, hence the inclusion of @ResponseBody .
As name suggest, it shall be used in case of REST style controllers i.e. handler methods shall return the JSON/XML response directly to client rather using view resolvers. It is a convenience annotation that is itself annotated with @Controller and @ResponseBody .
Actually, a @RestController
can also return view:
Set the controller method's return type to be ModelAndView
Set your view path like this:
ModelAndView mav = new ModelAndView("userCenter/loginPage");
return mav;
You get the correct JSO page view content.
You shouldn't. A @RestController
is not meant to return view names through a String
return type/value. It's meant to return something that will be written to the response body directly.
More concretely (in the general configuration case), Spring MVC configures its return value handlers in RequestMappingHandlerAdapter#getDefaultReturnValueHandlers()
. If you look at that implementation, the handler for String
view names, ViewNameMethodReturnValueHandler
, is registered after the handler for @RestController
(really @ResponseBody
), RequestResponseBodyMethodProcessor
.
If you really have to, you can declare your method to have a return type of View
or ModelAndView
(the handlers for these, ViewMethodReturnValueHandler
and ModelAndViewMethodReturnValueHandler
, are registered before RequestResponseBodyMethodProcessor
) and return the appropriate object, with an identifying view name.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With