我有以下 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/