应用@ResponseBody时出现循环视图路径错误

时间:2019-07-27 07:35:16

标签: java spring spring-boot spring-mvc

我有下面的控制器。

@Controller
public class AppController {

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

当我注释掉@ResponseBody注释时,在调用/ home url时出现错误。为什么? 消息在下面

  

javax.servlet.ServletException:循环视图路径[home]:将   再次分派回当前的处理程序URL [/ home]。检查你的   ViewResolver设置! (提示:这可能是由于未指定   视图,因为默认的视图名称生成。)   org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:209)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]在   org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:147)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]在   org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]在   org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1370)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]在   org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1116)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]在   org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]在   org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]在   org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]在   org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEASE]在   javax.servlet.http.HttpServlet.service(HttpServlet.java:645)   〜[javax.servlet-api-4.0.1.jar:4.0.1]在   org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)   〜[spring-webmvc-5.1.4.RELEASE.jar:5.1.4.RELEAS

但是当我将控制器方法更改为以下方法时,我没有收到任何错误:- 为什么?

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

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

  return ResponseEntity.ok(u);  

}

1 个答案:

答案 0 :(得分:0)

如果没有@ResponseBody或ResponseEntity,@ Controller将无法独立运行

ResponseEntity类似于@ResponseBody,但具有状态和标头。

为什么我们需要@ResponseBody?

因为,如果您的任何请求映射方法(例如home())都包含@ResponseBody批注,则表明方法返回值应绑定到Web响应主体,并且如果我们不提及@ResponseBody,则返回的Object将被视为View之一,并且ViewResolver将开始在应用程序中寻找相应的视图。

有关更多详细信息,请参阅:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-return-types