如何将 axios 中的数组参数传递到弹簧控制器?

vid*_*idy 4 reactjs spring-boot axios

我正在尝试使用 axios get request 将名称数组传递给 spring 控制器。如果我尝试在 params 中传递单个值,它工作正常,但如果在 params 中传递数组,那么我会收到错误“CORS 标头‘Access-Control-Allow-Origin ' 丢失的”。我试过这个

这是网址

http://localhost:8080/onlineshopping/view/category/products?name[]=Alex&name[]=john
Run Code Online (Sandbox Code Playgroud)

任务动作.js

var request = {
params: {
name : JSON.parse(localStorage.getItem('name')) 
   }
} 
const res = await axios.get(`http://localhost:8080/onlineshopping/view/category/products`,request);

dispatch({
type: GET_CATEGORY_PRODUCTS,
payload: res.data
});
};
Run Code Online (Sandbox Code Playgroud)

但这不起作用

我的弹簧控制器

@RequestMapping(value = "/view/category/products")
public Map<String, Object> viewProducts(
        @RequestParam(value = "name[]", required = false) List<String> name,
        HttpServletRequest request, HttpServletResponse response) {

    Map<String, Object> mapproducts = new HashMap<String, Object>();

    for (String Str : name) {
        System.out.println("name " + Str);
    }
Run Code Online (Sandbox Code Playgroud)

Vin*_*nay 5

您可以使用查询字符串解析和字符串化库“qs”。

import Qs from 'qs'

params = {
name : JSON.parse(localStorage.getItem('name')) 
}

let myAxios = axios.create({
  paramsSerializer: params => Qs.stringify(params, {arrayFormat: 'repeat'})
})

const res = await 
myAxios.get(`http://localhost:8080/onlineshopping/view/category/products`, {params});

dispatch({
type: GET_CATEGORY_PRODUCTS,
payload: res.data
   });
};
Run Code Online (Sandbox Code Playgroud)

你会得到这样的网址

http://localhost:8080/onlineshopping/view/category/products?name=Alex&name=john
Run Code Online (Sandbox Code Playgroud)

在弹簧控制器中,您可以使用拆分字符串

Arrays.asList(name.split("\\s*,\\s*"))
Run Code Online (Sandbox Code Playgroud)

弹簧控制器

@RequestMapping(value = "/view/category/products")
public Map<String, Object> viewProducts(
    @RequestParam(value = "name", required = false) String name,
    HttpServletRequest request, HttpServletResponse response) {

 List<String> name = Arrays.asList(name.split("\\s*,\\s*"));
Run Code Online (Sandbox Code Playgroud)