我正在向Spring Controller发送一个带有数组参数的Ajax GET请求,
$.ajax({
url: "getChoices",
dataType: "json",
type: "get",
data: {
'myarg': myarray // JS array of strings, ["a","b","c"]
// Verified to be correct
},
应该接收此参数的Controller方法-arg名称匹配:
@ResponseBody
@GetMapping("/getChoices")
public List<KeyValueBean> getChoices(List<String> myarg) {
//...
}
首先,这是上面写的方式,我得到了错误:
[java.lang.IllegalStateException: No primary or default constructor found for interface
java.util.List]
Caused by: java.lang.NoSuchMethodException: java.util.List.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.getDeclaredConstructor(Class.java:2178)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:216)
然后我尝试进行一些调整:
1)将方法签名设置为String[]
,这不是我想要的-我需要一个List-但为了以防万一,请尝试使用它:
public List<KeyValueBean> getChoices(String[] myarg) {
这是方法中的方法,但是 myarg为NULL ,并且未正确设置。
2)保留List<String>
,但尝试在数组周围进行JSON.stringify:
JSON.stringify(myarray)
相同的例外:[java.lang.IllegalStateException: No primary or default constructor found for interface java.util.List]
如何在Spring Boot中的Ajax GET请求中传递数组arg?
答案 0 :(得分:0)
您忘了用@RequestParam
注释参数。
@GetMapping("/testList")
public void test(@RequestParam("myarg") List<String> myarg) {
for (String str : myarg) {
System.out.println(str);
}
}
您可以按照以下步骤将请求发送到您的端点,它将起作用。
http://localhost:8080/testList?myarg=abc,def
答案 1 :(得分:0)
对我唯一有用的是在gamma = -(gamma_x[i+1] + magma_ddot(i,&d_gamma_x[1],1,&(d_l2)[1],1, queue))/delta;
值中指定[]
:
@RequestParam
这是https://stackoverflow.com/a/5702905/1005607
的常规解释。这是由于Spring与之间的参数命名不兼容 jQuery,jQuery希望在其中添加方括号以表明 参数是一个数组(我认为PHP也是如此),但是Spring 不在乎。