На первом этапе мне удалось успешно сохранить одного пользователя с помощью $resource save в angularjs, переданном службе Resteasy, и все работает хорошо.
На втором этапе то, что я пытаюсь сделать сейчас, это то, что я хочу опубликовать JSON массива пользователей (и сохранить в onego через angularjs $resource, сохранить этот массив объектов) в потребительский Restful WebService (я использую Resteasy).
мой json сейчас выглядит так (массив пользователей):
[
{
"userid": 1,
"firstName": "kevin",
"lastName": "buruk",
"email": "[email protected]"
},
{
"userid": 2,
"firstName": "helm",
"lastName": "krpuk",
"email": "[email protected]"
},
{
"userid": 3,
"firstName": "batok",
"lastName": "kelapa",
"email": "[email protected]"
}
]
Бэкенд
Для достижения своей цели я вношу несколько изменений в свой предыдущий рабочий бэкэнд, особенно в UserClientServiceImpl, например:
1- Путем изменения подписи метода создания (см. код ниже) с окончательной подписи пользователя на окончательную подпись пользователя [] пользователей, чтобы обрабатывать массив пользователей вместо одного пользователя.
2- и прибавив петлю ЗА. запросить уже хорошо подтвержденную
работу create userService@Путь("/пользователи")
открытый класс UserClientServiceImpl реализует UserClientService {
@POST @Consumes(RestCookieBuilder.JSON_UTF8) @Produces(RestCookieBuilder.JSON_UTF8) @Override public Response create(final User[] users) {<---------Is Signature here is ok? Response.ResponseBuilder responseBuilder = Response.ok(); for(User user : users) { try { userService.create(user); } catch(Exception e) { responseBuilder = Response.status(Response.Status.EXPECTATION_FAILED).entity("{\"error\":\"" + "canceled user :(" + e.getMessage() + ")\"}"); } } return responseBuilder.build(); }
}
Внешний интерфейс
и изменил мой UserService в angularjs, добавив в save: isArray: true, потому что теперь мы больше не работаем с одним пользователем, а вместо этого работаем с массивом пользователей.
В AngularJS на этом сервисе я написал код ниже
(function () {
'use strict';
angular.module('app').factory('UserService', function ($resource){
return $resource('rest/users/', [],
{
delete: {method: 'DELETE', url: 'rest/users/:id'},
save: {method: 'POST',url: 'rest/users',isArray: true},
findAll: {method: 'GET', url: 'rest/users'},
});
});
})();
В AngularJS я также внес некоторые изменения в приведенный ниже код контроллера для публикации через $ressource в WebService.
на этот раз в моем контроллере я создал список пользователей
, а затем попробовал 2 вещи: 1-моей первой попыткой было опубликовать через $ressource сохранение в WebService (часть кода, которая прокомментирована в листинге ниже). 2. Моя вторая попытка заключалась в публикации через $http в WebService (см. ниже в листинге).
var list = [];
for(i = 0; i < users.length; i++) {
var user={};
user=users[i]['value'];
list.push(user);
}
/*UserService.save(JSON.stringify(list), function (success) {
$element.modal('hide');
close({type: 'success', msg: 'Users created successfully'}, 500);
}, function (error) {
alert(" Errorrs for users !!!!!! "+i);
createErrorAlert(error);
});*/
var liststringifyed=JSON.stringify(list);
$http.post("rest/users",{users:liststringifyed})
.success(function (data, status, headers) {
$scope.ServerResponse = data;
$element.modal('hide');
close({type: 'success', msg: 'Users created successfully'}, 500);
})
.error(function (data, status, header, config) {
$scope.ServerResponse = data ;
alert(" Errorrs for users !!!!!! "+i);
});
};
как вы можете видеть, моя первая попытка увидеть прокомментированную часть кода, т.е. UserService.save (JSON.stringify (список), функция (успех), она не работает.
с другой стороны, во второй попытке я также попытался использовать службу $http, как вы можете видеть, но тоже безрезультатно.
Вопрос по бэкенду:
Каков правильный синтаксис службы RestEasy для использования этого массива пользователей json? Я имею в виду: общедоступный ответ на линии create(final User[] users) is (final User[] users), поскольку подпись будет принята, или мне следует использовать другие обходные пути, например URI или String AnArray, и проанализировать эту строку, как здесь:
public create (String AnArray) {
JSONArray o = new JSONArray(AnArray);
System.out.println(o.toString());
return responseBuilder.build();
}
с другой стороны на фронтенде:
-Каков правильный синтаксис в UserService angularjs для успешного использования службы сохранения из angularJS $resource в этом случае, когда передается массив объектов?
это строка JSON.stringify мой список это правильно
Для $ressource.save
UserService.save(JSON.stringify(list), function (success) {
OR
Для сервиса $http
var liststringifyed=JSON.stringify(list);
$http.post("rest/users",{users:liststringifyed}){
NB: если мы не можем использовать сохранение из $resource для этого случая, как добиться этого с помощью службы $http?
Большое спасибо за вашу помощь.