0
votes

I have the below Controller.

@Controller
public class AppController {

    @RequestMapping("/home")
    @ResponseBody
    public User home() {
        User u = new User();
        u.setUserId(10);
        u.setUserName("Rahul");
        return u;
    }
}

when I comment out the annotation @ResponseBody I get an error while calling /home url.Why? The message is below

javax.servlet.ServletException: Circular view path [home]: would dispatch back to the current handler URL [/home] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.) at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:209) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:147) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1370) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1116) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) ~[javax.servlet-api-4.0.1.jar:4.0.1] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEAS

But when I change my controller method to the below I don't get any error :- Why?

 @RequestMapping("/home")
//@ResponseBody // commented
 public ResponseEntity<User>  home(){

      User u = new User();
      u.setUserId(10);
      u.setUserName("Raj");

  return ResponseEntity.ok(u);  

}
1

1 Answers

0
votes

@Controller will not work stand-alone without @ResponseBody or ResponseEntity

ResponseEntity is like @ResponseBody but with status and headers.

Why we need @ResponseBody ?

Because, if any of your request mapping method, like home(), contains @ResponseBody annotation it gives an indication that a method return value should be bound to the web response body and if we don’t mention @ResponseBody, then the returned Object will be considered as one of the View and ViewResolver will start looking for respective view in the application.

For further details please refer: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-return-types