Невозможно передать массив из Angular 2 машинописи в Spring Java - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь передать массив String из моего машинописного текста

tmp : Array<string> = [];

Итак, у меня есть функция, которая принимает этот массив в качестве параметра ввода

passValues(test : Array<string>) {
   ........
   // some method to call post method from service
}

Так в обслуживании

public passingOfValues( test : Array<string> ) : Observable<Array<string>> {
    let headers = new Headers({ 'Content-Type': 'application/json'} );
    let options = new RequestOptions({ headers: headers); 

    let response = this.http.post(this.basePath + this.modulePath + '/getArrayValue', {'test' : test }, options)
            .map(this.extractData)
            .catch(this.handleError);
            return response;
}

Но я получаю ошибки, такие как Системное свойство [org.owasp.esapi.devteam] не установлено

И я прочитал в других сообщениях, что я должен преобразовать массив в массив перед передачейв бэкэнд.

Есть ли причина, по которой мне нужно преобразовать в строку / можно ли просто передать необработанный массив?

РЕДАКТИРОВАТЬ 1: включая коды контроллера бэкэнда

public ResponseEntity<?> getArrayValues( ArrayList<String> test ) {
     logger.debug("@@@ Test if array has a size @@@" + test.size());


}

Видимо, размер уже показывает 0 отсюда.

РЕДАКТИРОВАТЬ 2:

Во время отладки я понял, что SQL на задней части получает, скажем,

HOME CHARACTER(20 OCTETS)

это делает любойразница? Как передача строки в октеты, или мне нужно выполнить какое-то преобразование?

Извините, если у меня много вопросов, я также усердно работаю над отладкой и узнаю больше об этом!

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Большинству разработчиков нравится JSON-данные как запрос, и это хорошая практика в RESTful API-интерфейсе. почему?

Формат JSON {key1: value1, key2: value 2,....}

Вы передаете

this.http.post(this.basePath + this.modulePath + '/getArrayValue',{'test' : YOUR_ACTUAL_ARRAY})

от внешнего интерфейса. httpClient.post(url,body,options?) имеет url и body как обязательные. Как вы можете получить его в бэк-энде? Так как у вас есть только тело,

    public ResponseEntity<?> getArrayValues(@RequestBody List<String> test) {    
       // codes
    }

Ключ переданного параметра из внешнего интерфейса test и переменная, которая слушает в конце, должны иметь одно и то же имя. В противном случае @RequestBody("KEY_NAME") List<String> any_variable

Как вы и просили в комментарии, у вас может быть две пары ключ-значение. Например: { "test" : value1, "tmp": value2}. Предположим, value1 и value2 оба являются массивом String.

this.http.post(this.basePath + this.modulePath + '/getArrayValue',{'myJson' : YOUR_JSON})

Есть много путей (например, Gson, ObjectMapper и т. Д.). Я использую другой способ.

Создайте класс с именем TestTmpConverter

class TestTmpConverter{
    List<String> test;
    List<String> tmp;

    //No-argument constructors & Argument constructors
    //Getters
}

В контроллере

public ResponseEntity<?> getArrayValues(@RequestBody List<TestTmpConverter> myJson ) {
    List<TestTmpConverter> test=myJson.getTest();
    List<TestTmpConverter> tmp=myJson.getTmp();

    // Do your work

}

Я показал только один способ. Есть много способов пройтиданные на сервер, как @RequestParam, @PathVariable etc. Я чувствую, что теперь вы получаете что-то, как вы можете передать данные.

1 голос
/ 08 октября 2019

Для вашего клиента поместите ваши данные непосредственно в тело POST:

public passingOfValues( test : Array<string> ) : Observable<Array<string>> {
    let headers = new Headers({ 'Content-Type': 'application/json'} );
    let options = new RequestOptions({ headers: headers); 

    let response = this.http.post(this.basePath + this.modulePath + '/getArrayValue',
                  test, options)
            .map(this.extractData)
            .catch(this.handleError);
            return response;
}

В службе REST используйте аннотацию @RequestBody:

public ResponseEntity<?> getArrayValues(@RequestBody String[] test ) {
     logger.debug("@@@ Test if array has a size @@@" + test.size());


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...