Как разместить массив объектов Json в AngularJS (используя $ resource save или через службу $ http) и Как использовать его в Resteasy - PullRequest
0 голосов
/ 05 октября 2018

На первом шаге я добился успеха, чтобы сохранить одного пользователя с помощью $ resource save в angularjs, переданном в службу Resteasy, и все работает хорошо.

На втором шаге то, что я сейчас пытаюсь сделать, это, Я хочу опубликовать JSON массива пользователей (и сохранить в onego через angularjs $ resource сохранить этот массив объектов) для потребителя Restful WebService (я использую Resteasy).

мой json сейчас выглядит вот так(массив пользователей):

 [
        {
            "userid": 1,
            "firstName": "kevin",
            "lastName": "buruk",
            "email": "pucuk@ubi.com"
        },
        {
            "userid": 2,
            "firstName": "helm",
            "lastName": "krpuk",
            "email": "helmkrupuk@gmail.com"
        },
        {
            "userid": 3,
            "firstName": "batok",
            "lastName": "kelapa",
            "email": "batokkelapa@gmail.com"
        }
    ]

Backend

Для достижения моей цели я работаю с несколькими изменениями в моем предыдущем рабочем бэкэнде, в частности, над UserClientServiceImpl, например:

  • 1 - путем изменения подписи метода создания (см. Код ниже) с конечной пользовательской подписи пользователя на конечную пользовательскую подпись пользователя [], чтобы обрабатывать массив пользователей вместо одного пользователя.

  • 2- и добавив цикл FOR.для запроса уже хорошо подтвержденного
    рабочего создания userService

    @ Path ("/ users")

    открытый класс 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();
      }
    

    }

Frontend

и изменил мой 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 save to 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, как вы можете видеть, но результата тоже нет.

Вопрос о Backend:

Какой правильный синтаксис для службы RestEasy для использования этого массива json users? Я имею в виду: в открытом доступе public Response create (конечные пользователи []) является (конечными пользователями [] пользователи) в качестве подписибыть принятым или я должен использовать другие обходные пути, например, URI или String AnArray, и проанализировать эту строку как здесь:

public  create (String AnArray) {
           JSONArray o = new JSONArray(AnArray);

                System.out.println(o.toString());

                return responseBuilder.build();
}

с другой стороны на переднем конце:

- Какой правильный синтаксис вUserService angularjs для достижения успешного использования сохранения из службы angularJS $ ресурсов в этом случае, когда передается массив объектов?

это строка JSON.stringify мой списокЧто нужно сделать

За $ ressource.save

UserService.save(JSON.stringify(list), function (success) {

ИЛИ

За службу $ http

var liststringifyed=JSON.stringify(list);
$http.post("rest/users",{users:liststringifyed}){

Примечание: если мы не можемв этом случае используйте save from $ resource, как добиться этого с помощью службы $ http?

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 октября 2018

Следите за поздним ответом, но он может быть полезен для других, проверьте и убедитесь, что вы отправили что-то вроде этого:

[
        {
            "userid": 1,
            "firstName": "kevin",
            "lastName": "buruk",
            "email": "pucuk@ubi.com"
        },
        {
            "userid": 2,
            "firstName": "helm",
            "lastName": "krpuk",
            "email": "helmkrupuk@gmail.com"
        },
        {
            "userid": 3,
            "firstName": "batok",
            "lastName": "kelapa",
            "email": "batokkelapa@gmail.com"
        }
]

, а не как показано ниже, потому что отправив или отправив сообщение:

{"users":[
        {
            "userid": 1,
            "firstName": "kevin",
            "lastName": "buruk",
            "email": "pucuk@ubi.com"
        },
        {
            "userid": 2,
            "firstName": "helm",
            "lastName": "krpuk",
            "email": "helmkrupuk@gmail.com"
        },
        {
            "userid": 3,
            "firstName": "batok",
            "lastName": "kelapa",
            "email": "batokkelapa@gmail.com"
        }
    ]
"}

вы публикуете объект с одним именованным свойством 'users'.вы не публикуете массив

Так что в моем случае я отправлял объект с одним именованным свойством, и когда вы получаете это в бэкэнде, попробуйте удалить последние два символа и подстроку, совпадающую с {"users": другойна бэкэнде ваша строка параметров является jsonstring, поэтому вам нужно удалить все обратные слешы, чтобы получить действительный json.

, поэтому, чтобы ответить на это, вы должны добавить

зависимости к maven

<dependency>
           <groupId>org.json</groupId>
           <artifactId>json</artifactId>
           <version>20180813</version>
</dependency>
<dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.1</version>
</dependency>

добавить в

======

import org.json.JSONArray;
import org.json.JSONObject;
import com.google.gson.Gson;


  @POST
  @Consumes(RestCookieBuilder.JSON_UTF8)
  @Produces(RestCookieBuilder.JSON_UTF8)
  @Override
  public Response create(String AnArray) {
    String string2 = "{\"users\":\"";
    int index = AnArray.indexOf("{\"users\":\"");
    if(index == -1) {
      // Not found. What do you want to do?
    }
    else {
      String result = AnArray.substring(0, index) + AnArray.substring(index + string2.length());
      result = result.substring(0, result.length() - 2);
      String jsonFormattedString = result.replaceAll("\\\\", "");
      AnArray = jsonFormattedString.trim();
    }

    Response.ResponseBuilder responseBuilder = Response.ok();
    try {
      String passedObj = AnArray.trim();

      JSONArray array = new JSONArray(passedObj);
      User[] users = new User[array.length()];

      for(int i = 0; i < array.length(); i++) {

        JSONObject jsonObject = (JSONObject) array.get(i);

        Gson gson = new Gson();
        Object object = gson.fromJson(jsonObject.toString(), User.class);

        users[i] = (User) object;

      }

      for(User user : users) {

        try {
            userService.create(user);

        }
        catch(UserException e) {
          responseBuilder = Response.status(Response.Status.PRECONDITION_FAILED).entity("{\"error\":\""
                                                                                        + "Users not created: ("
                                                                                        + e.getMessage() + ")\"}");
        }
      }
    }
    catch(Exception e) {
      e.getMessage();
    }

    return responseBuilder.build();
  }

на внешнем интерфейсе AngularJS

=========================

  $http.post("rest/users",{users:liststringifyed})
                    .success(function (data, status, headers) {
                        $scope.ServerResponse = data;
                        $element.modal('hide');
                          close({type: 'success', msg: 'users created in onego'}, 500);
                    })
                    .error(function (data, status, header, config) {
                        $scope.ServerResponse =  data ;

                        alert(" Errorrs !!!!!! "+i);
                         // createErrorAlert($scope.ServerResponse);

                    });
...