我有一个用户可以拥有多个地址的表单。一个地址包含一个街道和国家的例子,以保持简单。
在我看来,我所拥有的是以下内容。每当用户按下按钮时,弹出一个带输入的不同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
};
Spring Controller:
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());
}
以下内容在我的弹簧控制台中打印出来(我只填写了街道名称中的值&#39; aaa&#39;,&#39; bbb&#39;,&#39; ccc&#39;。
[{"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(&#34; valuehere&#34;)并直接将其解析为jsonarray。
答案 0 :(得分:1)
您的错误来自JSONObject序列化,而不是Spring,因为您没有使用@RequestBody
(您可能会看一下here)。你的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
的对象