AngularJS/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
};

弹簧控制器:

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 的对象

最新更新