2016-12-27 4 views
0

Я пытаюсь передать несколько списков из AngularJS в контроллер Spring через POST-вызов. Если я отправлю только один список, как указано ниже, он отлично работает на контроллере Spring, но хотел бы знать, как лучше всего отправить несколько списков с углового на весну.Как передать несколько массивов из AngularJS в контроллер Spring

$scope.formData = []; 
var AList = []; 
AList.push({'a': 1, 'b' :2}); 
$scope.formData = AList; 
$http.post('saveData', $scope.formData).success(function(resp){}); 

Когда я пытаюсь отправить несколько список через тот же подход, но с помощью толчок, он получил в контроллер Spring, как показано ниже, который я думаю, что справедливо

$scope.formData.push(Alist); 
$scope.formData.push(Blist); 

я получаю что-то, как показано ниже в контроллере весны.

[[ {a=1, b=2}, {a=3, b=4} ]] 

Как проэктировать это в контроллере весны и сохранить его в моем доменном объекте.

Является ли это правильный подход, или Есть ли лучший способ сделать это

+0

Это перепутано. Что вы пытаетесь отправить? Список чего? Ваш Alist или Blist не являются списками (в значении массивов), а представляют собой карту значений ключа (или проще: объект). Вы хотите отправить список объектов? Как выглядит объект вашего домена? –

+0

Правильно, я хочу отправить список объектов домена. Мы можем предположить, что объект домена содержит поля a и b. То, что я сделал, я получил его как простой массив объектов @RequestBody Object [] objDetail Тогда я итерация его с помощью JSONArray, и я был в состоянии получить значения по желанию – CrazyMac

+0

Ok, теперь я вижу. Я отправил свой ответ. –

ответ

1

Ваш внешний интерфейс подход является правильным. Все, что вам нужно сделать, это создать пустой массив, направить туда столько объектов, сколько вам нужно, и отправить его на сервер.

//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 

} 

И вы получаете список объектов, являющихся точным java-представлением объектов json от углового. Вы можете просматривать список в стандартной ява способами, например, с помощью Foreach оператора:

for (MyDomainObject obj : myDomainObjects) { 

    //do something with each object. 

    //i.e. print value of "a" field 
    System.out.println("Value of a: " + obj.getA()); 
} 

или с использованием потоков в случае Явы 8:

//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(); 

Примечание: Выше решение будет работать, если вы настроили mapper. Если вы используете Spring-загрузку с любым веб-стартером, вы получите ее бесплатно. В стандартном проекте Spring (с настройкой по своему усмотрению) вы должны включить jackson библиотеку в путь к вашему проекту и зарегистрировать ObjectMapper bean в классе конфигурации или xml.

+0

Конечно, я попробую это и напишу свой ответ – CrazyMac

Смежные вопросы