I have not much experience in Spring MVC and I have the following about what are the valids return types that a controller method can return.
So I know that the user generate an HttpRequest received and handled by the DispatcherServlet that dispatch this request to a specific controller class.
A controller class is something like this:
@Controller
public class AccountController {
@RequestMapping("/showAccount")
public String show(@RequestParam("entityId") long id, Model model) {
...
}
.......................................
.......................................
.......................................
}
So I know that each method handle a specific request and that the handled request is specified by the @RequestMapping annotation.
I also know that the method return a String object that is the logical view name (that then is resolved by the view resolver to render the view)
So, at this stage, I think that a method of a controller class returns only String object. But I am not sure of it. Maybe a method like this can return also some different kind of objects?
There are many return types are available for Handler method which is annotated by
@RequestMapping
inside the controller, like :ModelAndView (Class)
Model (Interface)
HttpEntity<?>
orResponseEntity<?>
HttpHeaders
and much more.....See Docs
Every return type have its specific use for example: If you are using String then it means return View Name and this view name will resolved by
ViewResolver
. If you don't want to return any view name mention return type asvoid
. If you want to set view name as well as want to send some data to view useModelAndView
as a return type.Please go through the documentation you will also get to know what kind of method argument you can pass in the handler method.
you could take a look at AnnotationMethodHandlerAdapter#getModelAndView. This method has several conditions based on the return type to choose what to do with the returned value.
You have a direct answer in the doc
Take a special note of the
When the method is annoated with @ResponseBody, the return type can be any custom type, any Java pojo, that the framework will convert to an appropriate repsentation JSON, XML or the like and write back to the response body