你前端的做法是正确的。所有你需要做的就是创建一个空数组,并根据需要推入尽可能多的对象并将其发布到服务器。
//Create an empty array
$scope.formData = [];
//Push as many objects as you need
$scope.formData.push({'a' : 1, 'b' : 2});
$scope.formData.push({'a' : 3, 'b' : 4});
//Post it to server
$http.post('saveData', $scope.formData).success(function(resp){
//handle response
});
但是你的春天的一面可以改进。对象数组(Object[]
)通常被弃用,因为它们不是类型安全的,因此容易出错。只要有可能,应该用参数化的收藏品(从Java Collections Framework)替换它们。
在你的情况,你可以适用下列步骤:
创建类的域对象或DTO,对应于收到的JSON对象。
public class MyDomainObject {
private Integer a;
private Integer b;
public MyDomainObject(){ }
//getters and setters omitted
}
然后在您的终点法切换@RequestBody
类型从Object[]
到List<MyDomainObject>
。
@RequestMapping(path = "/saveDate", method = RequestMethod.POST)
public void postDomainObjects(@RequestBody List<MyDomainObject> myDomainObjects){
//Do some business logic.
//i.e. pass further to service or save to database via repository
}
并收到来自角JSON对象的确切Java表示对象的列表。
//Apply some filtering, mapping or sorting to your collection.
//i.e. count sum of "a" field values.
int sumOfAFields = myDomainObjects.stream()
.mapToInt(o -> o.getA())
.sum();
注: 以上
for (MyDomainObject obj : myDomainObjects) {
//do something with each object.
//i.e. print value of "a" field
System.out.println("Value of a: " + obj.getA());
}
或使用在Java 8的情况下,流:你可以使用的foreach运营商重复在一个标准的Java方法的列表,例如解决方案将工作,如果你已经配置了对象映射器。如果您使用任何Web Starter使用Spring引导,您将免费获得它。在标准的spring项目中(自己配置),您必须将jackson库包含到项目的类路径中,并在配置类或xml中注册ObjectMapper
bean。
这是搞砸了。你想发送什么?什么?你的Alist或Blist不是列表(在数组的意义上),而是一个键值映射(或更简单:一个对象)。你想发送一个对象列表吗?你的域名对象是什么样的? –
那是正确的,我想发送域对象的列表。我们可以假设域对象包含字段a和b。 我所做的是我收到它作为简单对象 的数组对象@RequestBody [] objDetail 后来我反复使用它和JSONArray我能得到的值,按需 – CrazyMac
好了,现在我明白了。我发布了我的答案。 –