无法将 Array 从 Angular 2 打字稿传递到 Spring Java



我正在尝试从打字稿中传递字符串数组

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)

这有什么区别吗? 比如将字符串传递到八位字节还是我必须进行一些转换?

抱歉,如果我有很多问题,我也在努力调试和学习更多关于它的信息!

大多数开发人员都喜欢将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?)urlbody是强制性的。如何在后端获取它?既然你只有身体,

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

从前端传递的参数键test和变量 后端中的侦听应使用相同的名称。否则@RequestBody("KEY_NAME") List<String> any_variable

正如您在评论中询问的那样,您可能有两个键值对。例如:{ "test" : value1, "tmp": value2}。假设value1value2都是字符串数组。

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。我觉得现在你得到了一些如何传递数据的东西。

对于您的客户,请将您的数据直接放在 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());

}

最新更新