使用fetch和@RequestParams时如何将列表绑定到控制器(&#34; params&#34;)List <string>

时间:2018-04-29 06:37:00

标签: spring reactjs

这是控制器:

@PostMapping(value="/order/add")
@ResponseBody
public JSONObject addOrder(@RequestParam("book") List<String> books,@RequestParam("addressid")Integer addressid){
   ...
}

以下是请求:

fetch(proxy+"/user/order/add",{
        method: 'post',
        credentials: 'include',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
          },
        body: msg,
    }) 

msg是这样的:

msg = "book="+encodeURIComponet(params1)+"&addressid="+encodeURIComponent(params2)

当我使用邮递员发送帖子请求时,它可以正常工作。

但是通过获取请求,后端表示它无法找到参数预订&#39;

Bad Request:Required List parameter 'book' is not present

前端有什么问题?

我通过邮递员发送的内容:postman

2 个答案:

答案 0 :(得分:0)

Book位于POST请求的正文中,RequestParam用于URL的参数,您必须使用RequestBody将正文绑定到DTO。

答案 1 :(得分:0)

哦,我发现问题是由msg引起的

let books = this.state.books
let msg = books + "&addressid=" + encodeURIComponent(addressid)
fetch(
   ...
)

书籍是这里的变量:

<Route path="/buy/:books" component={CheckOrder}/>

我之前编码变量:

let books = "book="+encodeURIComponent(parmas)+"&"
window.location.href = "/buy/"+books

因此,在获取

之前对encodeURIComponent进行编码非常重要