java - 应用 @ResponseBody 时出现循环 View 路径错误

标签 java spring spring-boot spring-mvc

我有以下 Controller 。

@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: 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

但是当我将 Controller 方法更改为下面的方法时,我没有收到任何错误:- 为什么?

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

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

  return ResponseEntity.ok(u);  

}

最佳答案

如果没有@ResponseBody或ResponseEntity,@Controller将无法独立工作

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

为什么我们需要@ResponseBody?

因为,如果您的任何请求映射方法(例如 home())包含 @ResponseBody 注释,它会指示方法返回值应绑定(bind)到 Web 响应正文,并且如果我们不提及 @ResponseBody,那么返回的对象将被视为 View 之一,ViewResolver 将开始在应用程序中查找相应的 View 。

更多详情请引用:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-return-types

关于java - 应用 @ResponseBody 时出现循环 View 路径错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57230121/

相关文章:

java - 导入的 Maven 项目在 STS 中不起作用

用于单独程序参数的 Java 单独日志文件

java - 不要关闭外部点击时的弹出窗口

java - 在非实体 java bean 中映射多个 hibernate 实体

java - org.springframework.web.client.HttpClientErrorException : 415 null(Spring Resttemplate)

java - Spring Boot 服务在空闲或服务请求过多后自动关闭

java - 向大型 xlsx 文件添加一行(内存不足)

java - 或者加速 Spring 响应的正确方法?

spring - 非默认端口上的Docker-compose,spring app + mongoDB

angular - 如何下载我的服务器(springboot)上生成的 Angular pdf文件?