springboot报错would dispatch back to the current handler URL [/test] again. Check your Vie

本文详细解析了SpringMVC中出现循环视图路径错误的原因,主要分为两部分:一是Controller方法返回的视图名称与请求路径相同导致死循环;二是方法未使用@ResponseBody注解且返回值为空时,会触发默认转发机制。文章提供了相应的解决策略,包括修改视图返回值和添加@ResponseBody注解。

报错内容:

2020-03-10 09:11:47.525 [http-nio-82-exec-5] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [test]: would dispatch back to the current handler URL [/test] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause
javax.servlet.ServletException: Circular view path [test]: would dispatch back to the current handler URL [/test] 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:210)

原因:
1、view name名称和path请求方法名相同,就等于让自己转发给自己,陷入死循环
如:

@RequestMapping("/test")
    public String hello() {
    	
		logger.trace("trace日志信息");
		logger.debug("debug日志信息");
	    logger.info("info日志信息");
	    logger.warn("warn日志信息");
	    logger.error("error日志信息");
	    return "test";
    }

解决方法:修改返回值

2、返回值为空,但方法上没有@ResponseBody,会造成缺省转发
如:

@RequestMapping("/test")
    public void hello() {
    	
		logger.trace("trace日志信息");
		logger.debug("debug日志信息");
	    logger.info("info日志信息");
	    logger.warn("warn日志信息");
	    logger.error("error日志信息");
    }

解决方法:方法上增加@ResponseBody

最近再学日志框架,写测试时候我报这个错误,错误原因为第二个。

其实我只是加上异步后,不报错了,但具体原因我还是不理解,如果有明白的,评论或者私信告诉我一下,为啥我浏览器打http://localhost:82/test请求hello()方法和@ResponseBody,注解有关系,直接敲不应该就是同步,然后报错找不到请求地址吗,怎么加上注解后,就不报错第二种错误了?

### 解决Spring MVC中的循环视图路径问题 当遇到`Circular view path [test]`错误时,这通常意味着控制器返回了一个试图解析成模板文件的逻辑视图名称,但是该模板无法被找到或存在配置上的冲突。为了有效处理这个问题,可以采取以下几个措施: #### 1. 配置视图解析器 确保应用程序中已正确定义了视图解析器。对于Thymeleaf这样的模板引擎,默认情况下会查找位于`src/main/resources/templates/`目录下的HTML文件。 ```xml <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 上述XML片段展示了如何通过Java Config来设置前缀和后缀属性以便于定位JSP页面[^1]。 #### 2. 修改Controller方法签名 检查控制器的方法是否正确指定了响应类型。如果希望直接返回字符串形式的内容而非渲染特定视图,则应使用@ResponseBody注解或者让方法返回ResponseEntity对象。 ```java @GetMapping("/hello") public @ResponseBody String hello() { return "Hello World!"; } ``` 这段代码表明了怎样利用@ResponseBody注解使HTTP请求得到纯文本回复而不是尝试加载视图资源。 #### 3. 调整视图命名约定 确认所使用的视图名不会引起歧义,并且与实际存在的物理文件相匹配。例如,如果有名为`index.html`的文件存在于classpath根目录下,那么应该避免简单地返回字符串`"index"`作为视图名称;相反,应当指定完整的相对路径如`"/index"`以防止潜在的循环引用风险。 #### 4. 排除不必要的自动装配组件 有时第三方库可能会引入额外的WebMvcConfigurer实现类或其他可能干扰默认行为的对象。可以通过排除这些依赖项或将它们标记为@Primary来解决问题。 ```properties spring.autoconfigure.exclude=\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration ``` 此配置示例说明了如何禁用某些不需要的数据源和持久层自动化配置选项[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值