Spring Boot接口GET/POST返回404但H2数据库数据成功存入如何解决
问题根因
你当前控制器类使用的是@Controller注解,该注解默认是Spring MVC的页面控制器,方法的返回值会被解析为视图模板路径,你返回的Iterable<Expense>、字符串ok.都不是存在的视图模板路径,所以Spring找不到对应视图就返回404错误。而接口方法本身逻辑已经正常执行,所以你可以看到控制台打印数据库内容、POST请求的数据也能正常入库。
解决方案
方案1(推荐):替换控制器注解
将控制器类上的@Controller注解替换为@RestController,该注解是@Controller + @ResponseBody的组合注解,会直接将方法返回值序列化为JSON/纯文本写入HTTP响应体,不会走视图解析逻辑:
// 替换后的类注解 @RestController @RequestMapping("/budget") public class ExpenseController { // 原有逻辑保持不变 }
方案2:单独给接口方法加@ResponseBody注解
如果需要保留@Controller注解(比如部分方法确实需要返回视图),可以给需要直接返回数据的接口方法单独加@ResponseBody注解:
@GetMapping("/view") @ResponseBody public Iterable<Expense> viewAll(Model model) { System.out.println(expenseRepo.findAll()); return expenseRepo.findAll(); } @PostMapping @ResponseBody public String addExpense(@RequestBody Expense expense) { expenseRepo.save(expense); return "ok."; }
提示:修改注解后重启项目,再次请求对应接口即可正常拿到响应结果。
内容的提问来源于stack exchange,提问作者Hasan Aga
相关产品推荐
相关产品推荐

