Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
434 views
in Technique[技术] by (71.8m points)

java - Returning view from Spring MVC @RestController

As @RestController is composition of @Controller and @ResponseBody, I believe if I want my controller to work as both MVC and REST controller just annotating with @RestController should be fine. Is that correct?

As @RestController is composition of @Controller and @ResponseBody, I think it internally means that it's good for

  1. Receiving the http request (because of @Controller)
  2. Sending the response in JSON format (because of @ResponseBody) though it can be changed if required
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

@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. You can not selectively disable the @ResponseBody on individual handler methods when @ResponseBody is already annotation on class level.

You can work around it by returning ModelAndView, which will work even in @RestController, but you really shouldn't:

@RequestMapping
public ModelAndView renderFooList() {
    ModelAndView mav = new ModelAndView("foo/list");
    mav.addObject("foos", fooService.getFoos());
    return mav;
}

It would be better to create separate controllers for normal handlers returning views and REST controllers for the RESTful stuff. Or to annotate the class with plain @Controller and put @ResponseBody on the methods where you actually need it.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...