AngularJS / Spring MVC - 无法访问控制器中的表单数据

时间:2015-04-30 13:43:30

标签: java json angularjs spring spring-mvc

我有一个用户可以拥有多个地址的表单。一个地址包含一个街道和国家的例子,以保持简单。

在我看来,我所拥有的是以下内容。每当用户按下按钮时,弹出一个带输入的不同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。

1 个答案:

答案 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

的对象