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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:02:36