通过 AJAX 调用将 JSON 对象列表传递给控制器
Posted
技术标签:
【中文标题】通过 AJAX 调用将 JSON 对象列表传递给控制器【英文标题】:Passing list of JSON objects to Controller via AJAX call 【发布时间】:2020-01-27 13:13:55 【问题描述】:下面是我要传递的数据
var data=["TAG":"Taxes","REMARKS":"Enter Remarks","TAG":"Taxes","REMARKS":"Enter Remarks"];
Ajax 调用将数据发布到控制器:
$.ajax(
type: "POST",
url: "rest/url",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result)
console.log(result);
,
error : function(xml, status, xhr)
obj = (xml.responseText);
);
@RequestMapping(value = "/url", method = RequestMethod.POST,consumes="application/json",produces="application/json")
public @ResponseBody
LinkedHashMap<String, ArrayList> getData(@RequestBody List<DataDTO> data,HttpServletRequest request1)
System.out.println("Inside Controller :"+data.getClass())// getting Arraylist object
DataDTO dto1=data.get(0);// getting class cast exception
在上面的代码中,我能够以 List 格式获取控制器中的数据,但是当我将对象初始化为 DTO 类时,我得到了ClassCastException
。
【问题讨论】:
把DataDTO
类的代码也贴出来。
@SudhirOjha 它是一个简单的 pojo 类 public class DataDTO String TAG;字符串备注; Getter 和 Setter
【参考方案1】:
您的DataDTO
类应该如下所示,因为在AJAX
中您使用的是TAG
和REMARKS
。但是在DataDTO
类中是TAG
和Remarks
。所以改变你的班级如下:
public class DataDTO
private String TAG;
private String REMARKS;
//Getters and setters
【讨论】:
我已经考虑过案例,但我仍然收到此错误。我实际上是在 json 对象中使用下面的代码添加一行。 $scope.data.unshift( TAG:'选择标签', REMARKS:'输入新备注');但是当我在控制台日志中打印数据时,我又得到了一个键 ["TAG":"Taxes","REMARKS":"Enter Remarks",,"$$hashKey":"object:280"] 以便在我的 DTO 类中处理它 我又创建了一个条目 private String $$hashKey;使用 getter 和 setter @RishiBeohar 从DataDTO
类中删除$$hashKey
,它是由angularjs
添加的。在您的 ajax 调用中使用 angular.toJson();
而不是 JSON.stringify()
。
仍然收到此错误“请求处理失败;嵌套异常是 java.lang.ClassCastException: java.util.LinkedHashMap 无法转换为”
还有其他方法可以读取控制器中的 JSON 对象列表吗?如果我可以分别读取每个 json 对象,那将非常有帮助。以上是关于通过 AJAX 调用将 JSON 对象列表传递给控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JSON 对象内的 JSON 数组传递给 jQuery 自动完成
通过jQuery ajax调用将值列表传递给django视图
通过 AJAX 将两个 JSON 模型对象从 PHP 传递到 JS
如何使用 ajax 传递 from.serialize() 和数组值?