You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot如何修复Circular view path异常?

问题现象

运行项目访问/Students路径时,日志抛出如下错误:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [Students]: would dispatch back to the current handler URL [/Students] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause

涉及的原有代码:

  • 控制器类代码
//Controller class

import java.util.List;

@Controller
public class StudnetController {

    @Autowired
    private StudentService studentService;

    @GetMapping(path = "/Students")
    public List<Student> getAllStudent(){

    return studentService.getStudent();
        
    }

}
  • 服务类代码
//service class


@Service
public class StudentService {

    @Autowired
    private StudentRepo studentRepo;

    public List<Student> getStudent(){

        return studentRepo.findAll();
    }
}
问题原因

这个错误是SpringMVC视图解析逻辑和接口返回预期不匹配导致的:

  • 控制器类使用的@Controller注解,默认会将接口方法的返回值识别为视图名称,走视图解析跳转流程,不会直接把返回的Java对象序列化成数据格式响应给客户端。
  • 当前接口方法直接返回List<Student>类型结果,没有添加任何标记告知Spring需要将结果直接写入响应体,Spring会按照默认规则生成视图名,最终生成的视图名刚好和请求路径/Students重名,DispatcherServlet匹配到该视图后会再次转发回当前请求路径,形成循环转发,最终抛出循环视图路径异常。
  • 服务层的查询逻辑没有问题,故障完全出在控制器层的注解配置上。
解决方法

两种方案选择任意一种即可修复问题:

  • 方案一:将控制器类的@Controller注解替换为@RestController。@RestController是Spring提供的组合注解,自带@ResponseBody生效逻辑,会自动将接口返回的对象序列化为JSON/XML格式写入响应体,完全跳过视图解析流程,适配当前写数据接口的需求。
    修改后的控制器类代码示例:
    //Controller class
    
    import java.util.List;
    
    @RestController
    public class StudnetController {
    
        @Autowired
        private StudentService studentService;
    
        @GetMapping(path = "/Students")
        public List<Student> getAllStudent(){
            return studentService.getStudent();
        }
    
    }
    
  • 方案二:如果需要保留@Controller注解(比如同一个控制器内既要写返回页面的视图接口,也要写返回数据的接口),可以单独给getAllStudent方法加上@ResponseBody注解,标记该方法的返回值直接写入响应体,不做视图解析。
    修改后的对应方法示例:
    @GetMapping(path = "/Students")
    @ResponseBody
    public List<Student> getAllStudent(){
        return studentService.getStudent();
    }
    

内容的提问来源于stack exchange,提问作者Seneth_lakshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 06:06:26