带有数组参数的Spring Boot Ajax GET请求,以列表形式接收:“未找到接口java.util.List的主要或默认构造函数”

时间:2019-05-08 19:41:22

标签: ajax spring spring-boot

我正在向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?

2 个答案:

答案 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

enter image description here

答案 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   不在乎。