DataTables服务端渲染遇Ajax错误(404),请求排查问题
DataTables ServerSide集成404错误排查
核心问题分析
你遇到的404错误主要源于接口路径不匹配或请求方法不兼容,以下是具体排查和修复方案:
1. 接口路径不匹配(最可能原因)
你的Controller类上标注了@RequestMapping("company/employee"),但方法上的@GetMapping("/listCompanies")带了开头斜杠:
- Spring中,方法级别的路径如果以
/开头,会被当作绝对路径,不会拼接类级别的前缀;若类级别路径未加开头斜杠,还可能导致路径歧义。 - 前端ajax请求的是
/listCompanies,但后端实际接口路径可能是/company/employee/listCompanies(若方法路径未加斜杠),或/listCompanies(若方法路径加了斜杠但后端未正确映射),两者不匹配就会触发404。
修复方案二选一:
- 方案一:调整前端请求路径
将ajax的url改为完整路径:ajax: "/company/employee/listCompanies" - 方案二:规范后端路径配置
修改Controller方法的路径(去掉开头斜杠),同时给类级别路径加上开头斜杠避免歧义:
前端改用相对路径(页面从@Controller @RequestMapping("/company/employee") public class CompanyController { // ... @GetMapping("listCompanies") // 去掉开头斜杠,自动拼接类级别路径 @ResponseBody public DataTablesOutput<Company> listCompanies(DataTablesInput input) { return repo.findAll(input); } }/company/employee/list-clients加载,相对路径会自动拼接前缀):ajax: "listCompanies"
2. 请求方法不兼容
DataTables的serverSide模式默认发送POST请求,但你的Controller方法用的是@GetMapping,这会导致请求无法被后端处理,进而触发404或请求失败。
修复方案:
将Controller方法的@GetMapping改为@PostMapping,同时前端指定请求类型:
@PostMapping("listCompanies") @ResponseBody public DataTablesOutput<Company> listCompanies(DataTablesInput input) { return repo.findAll(input); }
前端ajax配置补充type参数:
ajax: { url: "listCompanies", type: "POST" },
3. 其他排查点
- 检查路径大小写:确保后端接口路径和前端请求路径的大小写完全一致(比如
listCompanies和listcompanies会被视为不同路径)。 - 确认
@ResponseBody注解:Controller方法需要添加@ResponseBody才能直接返回JSON数据,否则会被当作页面模板路径解析,导致404。
内容的提问来源于stack exchange,提问作者Jaiylon
相关产品推荐
相关产品推荐

