@RequestParam 和 angularjs $http.post 数据检索

@RequestParam and angularjs $http.post data retrieval

我正在尝试发送数组

arr=["xxx.yyy","zzz.vvv"]

到 spring 这样的端点:

$http.post("url",arr)

spring 边:

@PostMapping(value = "url")
    public Set<String> func(@RequestParam(name="arr") String[] arr) {

    }

但是我一直收到

org.springframework.web.bind.MissingServletRequestParameterException: Required String[] parameter 'arr' is not present

如何通过参数名访问数组?我需要发送一些数组,所以我假设可以通过它们的名称来引用它们,但是@RequestParam 似乎不起作用

第二个参数应该是一个对象,arraysecondArray代表参数的名称。 yourArrayanotherArray 将是您在 Angular 应用程序中的数组。

$http.post(url', {
           array: yourArray,
           secondArray: anotherArray,
    });

然后,在您的 BE 端,您也将这些值称为 arraysecondArray

您需要创建一个以arr为键的params对象:

var params = {
    'arr': ["xxx.yyy","zzz.vvv"]
};

$http.post("url", params);

根据我从 spring 文档中看到的内容:

@RequestParam is for URL query parameters

@RequestBody is for parameters from body

作为post发送请求体中的信息,请尝试使用最新的:

@PostMapping(value = "url")
public Set<String> func(@RequestBody String[] arr) {

}

您可能还需要将 angular 部分修改为:

$http.post("url",{arr: arr})
arr=["xxx.yyy","zzz.vvv"]
var sendData = {data:arr};

$http.post("url", sendData);

在spring中可以得到sendData。当你要获取值时,你应该给出键或索引。前任。到达 [0], arr.name

要通过 post 发送多个数组,spring 端应该有一个对象,例如ArrayWrapper 将包含 3 个数组,然后应该通过 angular 发送一个 ArrayWrapper 对象,如果您使用的是像 jackson 这样的库,它会将对象从 requestbody 转换为正确的 java 对象,您可以进一步处理。

Angular:

getUsuarioId(id:number): Observable<Usuario>{
    return this.http.post<Usuario>(`${this.url}usuarioId`, id, {headers: {'Content-Type':'application/json', 'id': `${id}`}} )
}

Java:

@PostMapping("/usuarioId")
public Usuario getUserId(@RequestHeader  Integer id) {
    return usuarioService.findByIdUsuario(id);
}

你可以把id变量改成json,如下:

getUsuarioId(id:number): Observable<Usuario> {
    let params  = {
      'Content-Type':'application/json',
      'id':`${id}`
    }
    return this.http.post<Usuario>(`${this.url}usuarioId`, params, {headers: params})
}