我有一个表单,用户可以在其中拥有多个地址。例如,地址包含街道和国家/地区,以使事情变得简单。
在我看来,我有以下几点。每当用户按下按钮时,都会弹出一个带有输入的不同div,效果很好。
<div ng-repeat="address in addresses">
<input type="text" ng-model="address.streetname" placeholder="streetname"/>
<input type="text" ng-model="address.country" placeholder="country"/>
</div>
<button class="button" ng-click="addNewAddress()">Add address</button>
我的 AngularJS 控制器的一部分:
var formData = {
//...
"addresses" : $scope.addresses
};
弹簧控制器:
String[] addresses = request.getParameterValues("addresses");
for(String address : addresses) {
System.out.println(address); //ACTUALLY PRINTS SOMETHING
JSONObject j = new JSONObject(address); //ouch error.
System.out.println(j.toString());
}
以下内容打印在我的 Spring 控制台中(我只用值"aaa"、"bbb"、"ccc"填写了街道名称。
[{"address":"","$$hashKey":"object:4","streetname":"aaa"},{"address":"","$$hashKey":"object:6","streetname":"bbb"},{"address":"","$$hashKey":"object:8","streetname":"ccc"}]
错误消息:
A JSONObject text must begin with '{' at 1 [character 2 line 1]
编辑:现在它正在工作,这要归功于下面的两个,我只需要指出没有必要使用 request.getParameterValues()。相反,只需使用 request.getParameter("valuehere") 并直接将其解析为 jsonarray。
你的错误来自 JSONObject 序列化而不是 Spring 的,因为你没有使用@RequestBody
(你可以看看这里)。你的json是一个数组,你试图将其转换为对象objects are the things between { }
,这就是为什么它给你例外,你需要一个JSONArray
String[] addresses = request.getParameterValues("addresses");
for(String address : addresses) {
System.out.println(address);
JSONArray jArray = new JSONArray(address); //here!
System.out.println(jArray.toString());
//interate over array (like any other array) and do stuff, get the objects etc..
}
或者只是将数组更改为带有 Angular 的对象