移除JPA后SpringBoot的@RequestMapping访问报错求助
咱们来一步步拆解你遇到的问题:移除JPA和数据库依赖后启动没报错,但访问URL跳转到/error页面,之前用JPA时一切正常。结合你的代码和配置,问题主要出在这几个地方:
1. Controller注解用错了
你现在用的是@RestController,这个注解是@Controller + @ResponseBody的组合——它会让所有方法的返回值直接作为HTTP响应体(比如返回JSON或纯文本),而不是解析成视图名称来跳转页面。之前用JPA时可能因为其他配置掩盖了这个问题,但移除数据库相关依赖后就暴露出来了。
解决方案:把@RestController替换成@Controller,这样Spring才会把方法返回的字符串(比如"home.jsp")当作视图名称处理,进而跳转到对应的JSP页面。
修改后的Controller头部:
package me.thisGuy.controller; // 省略其他import import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller // 这里改成@Controller public class FitController { // 方法内容后续调整异常处理 }
2. 文件读取逻辑的异常未被捕获
你的clickMe方法里,文件操作代码在try-catch块外面:如果C:\\Users\\Me\\Documents\\XMLTest文件夹不存在、没有读取权限,或者folder.listFiles()返回null,执行for循环时会直接抛出NullPointerException,这个异常没被当前方法的try-catch捕获,会触发Spring Boot默认的错误页面跳转。
解决方案:把文件读取逻辑移到try块内部,同时增加非空判断:
@RequestMapping("/clickMe") public ModelAndView change(Model model) { ModelAndView chapterView = new ModelAndView(); List<String> chapterList = new ArrayList<String>(); try { chapterView.setViewName("view.jsp"); File folder = new File("C:\\Users\\Me\\Documents\\XMLTest"); File[] files = folder.listFiles(); // 增加非空判断,避免空指针异常 if (files != null) { for (File file : files) { if (file.isDirectory()) { chapterList.add("'" + file.getName() + "'"); } } } chapterView.addObject("chapters", chapterList); } catch (Exception e) { chapterView.setViewName("home.jsp"); // 打印完整异常栈,方便排查问题 e.printStackTrace(); } return chapterView; }
3. 确认JSP视图的配置和位置
Spring Boot对JSP的支持有默认路径要求,默认会去/src/main/webapp/WEB-INF/jsp/目录下查找JSP文件。如果你的home.jsp和view.jsp不在这个位置,需要在application.properties(或application.yml)里配置视图解析器的前缀和后缀:
比如JSP直接放在/src/main/webapp/目录下,添加以下配置:
spring.mvc.view.prefix=/ spring.mvc.view.suffix=.jsp
如果放在/src/main/webapp/WEB-INF/jsp/下,配置为:
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
最后验证步骤
- 替换Controller注解
- 调整文件读取的异常处理逻辑
- 确认JSP位置并配置视图解析器(如果需要)
- 重启项目,再次访问
/和/clickMe,应该就能正常跳转页面了。
内容的提问来源于stack exchange,提问作者ThisGuy

