【问题标题】:Circular View Path error on applying @ResponseBody应用@ResponseBody 时出现圆形视图路径错误
【发布时间】:2019-12-05 09:27:05
【问题描述】:

我有以下控制器。

@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);  

}

【问题讨论】:

标签: java spring spring-boot spring-mvc


【解决方案1】:

没有@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2018-07-20
    • 2017-09-12
    • 2019-01-21
    • 2020-12-25
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多