Ajax调用Spring Boot DELETE接口出现MethodArgumentTypeMismatchException如何解决
问题根因
报错提示中For input string: "{1}"已经明确了问题来源:你前端拼接请求URL时错误携带了Spring路径占位符的大括号,导致后端拿到的路径参数是带{}的字符串,无法转换为int类型。
- 后端
@DeleteMapping(path="/delete/{id}")里的{id}是Spring MVC的占位符语法,仅用于接口声明时标记参数位置,实际请求时不需要在URL中携带大括号 - 你当前JS代码拼接的URL为
'/delete/{'+ id +'}',当id为1时最终请求路径是/delete/{1},后端提取到的id参数值为字符串"{1}",转int时触发格式转换异常。
修复方案
修改前端JS中URL拼接逻辑,去掉大括号即可:
function removeEmployee(employeeId) { console.log("removeEmployee " + employeeId); id = parseInt(employeeId); $.ajax({ // 仅保留路径和参数值,删除大括号 url: '/delete/'+ id, type: 'DELETE', success: function(result) { console.log ("ajax success "); }, error: function() { console.log ("ajax failed "); } }); }
可选优化
- 前端拼接URL前增加id合法性校验,避免传入非数字值触发同类报错
- 后端可将路径参数类型改为
Integer,配合@Min等参数校验注解,结合全局异常处理器返回更友好的错误提示
内容的提问来源于stack exchange,提问作者kim
相关产品推荐
相关产品推荐

