Spring Ajax接收List<Question>数据异常,请求排查实现问题
排查Spring+JQuery Ajax+Jackson接口数据接收问题
我帮你梳理下代码里的几个关键问题,这些应该就是导致无法正常接收数据的原因:
1. Java接口注解冲突问题
你同时混用了JAX-RS注解(@POST、@Path、@Consumes)和Spring MVC注解(@RequestBody),这两种注解属于不同的Web框架体系,不能直接混用:
- 如果是用Spring MVC开发接口,应该替换成Spring的专属注解:
@PostMapping(value = "/receive", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public void consumeJSONList(@RequestBody List<Question> clientList) { String output = "consumeJSONList Client : " + clientList.toString() + "\n\n"; System.out.println(output); }
- 如果是用JAX-RS(比如Jersey)框架,应该去掉
@RequestBody,直接接收列表(需要确保Jackson支持JAX-RS的实体序列化):
@POST @Path("/receive") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public void consumeJSONList(List<Question> clientList) { String output = "consumeJSONList Client : " + clientList.toString() + "\n\n"; System.out.println(output); }
2. JQuery Ajax代码的多处错误
你的Ajax代码存在语法和参数配置错误,直接导致请求无法正确传递数据:
header应该是复数headers,且Content-Type值不完整,要写全application/json- 缺少
data参数,服务器根本接收不到你的请求体内容 - 变量
x重复定义,字符串形式的JSON最好转成JS对象再传递(或者直接定义对象数组更清晰) - Ajax配置不完整,缺少闭合的大括号,建议加上调试用的回调函数
修正后的Ajax代码:
function addData() { // 直接定义JS对象数组,避免字符串转义的麻烦 var dataList = [{ "id": 12, "email": "2", "lang": "es" }]; $.ajax({ type: 'POST', url: "rest/question/receive", headers: { "Content-Type": "application/json" }, data: JSON.stringify(dataList), // 把JS对象序列化为JSON字符串 success: function(response) { console.log("请求成功"); }, error: function(xhr, status, error) { console.log("请求失败: " + error); } }); }
3. 额外调试注意事项
- 确保你的Spring项目已经引入Jackson相关依赖(比如
spring-boot-starter-web默认包含),用来处理JSON的序列化和反序列化 - 检查
Question类是否有正确的无参构造函数,以及对应的getter/setter方法——Jackson需要这些来实例化对象 - 可以先用Postman测试接口是否正常,排除前端Ajax的问题后再调试前端代码
内容的提问来源于stack exchange,提问作者user2692038
相关产品推荐
相关产品推荐

