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

时间:2016-12-29 13:25:07

标签: angularjs arrays spring http angular-http

我正在尝试发送一个数组

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

到这样的弹簧端点:

$http.post("url",arr)
春天的一面:

@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似乎不起作用

6 个答案:

答案 0 :(得分:1)

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

  

@RequestParam用于URL查询参数

     

@RequestBody用于来自body

的参数

由于帖子在请求正文中发送信息,请尝试使用最新的:

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

}

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

$http.post("url",{arr: arr})

答案 1 :(得分:1)

角度:

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})
}

答案 2 :(得分:0)

第二个参数应该是一个对象,arraysecondArray代表参数的名称。 yourArrayanotherArray将成为Angular App中的数组。

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

然后,在您的BE方面,您也会将这些值称为arraysecondArray

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

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

春天你可以获得sendData。当你要获取值时,你应该给出密钥或索引。防爆。 arr [0],arr.name

答案 5 :(得分:0)

要通过柱子发送多个阵列,弹簧侧应该有一个物体,例如ArrayWrapper将保存3个数组,然后是一个ArrayWrapper对象应该通过angular发送,如果您使用像jackson这样的库,它会将对象从requestbody转换为您可以进一步处理的正确java对象。