在我的Spring Boot REST API应用程序中,我需要通过接受强类型列表作为输入来处理HTTP GET
:
@RestController
public class CusttableController {
@RequestMapping(value="/custtable", method=RequestMethod.GET)
public List<MyObject> getCusttableRecords(List<Custtable> customers) {...}
这给了我这个错误:
org.springframework.beans.BeanInstantiationException:无法实例化[java.util.List]:指定的类是接口
在GET
请求中,我在Spring Boot中接受强类型列表的正确方法是什么?
答案 0 :(得分:3)
添加注释@RequestBody
,该注释表示该参数已绑定到HTTP请求的正文。
另一件事是HTTP方法GET
方法不包含请求正文,因此@RequestBody
将被忽略。将方法更改为POST
。
@RequestMapping(value="/custtable", method=RequestMethod.POST)
public List<MyObject> getCusttableRecords(@RequestBody List<Custtable> customers) {
// ...
}
从Spring 4.3开始,您可以使用@PostMapping
:
@PostMapping(value="/custtable")
public List<MyObject> getCusttableRecords(@RequestBody List<Custtable> customers) {
// ...
}
尽管根据REST原理,应该使用POST方法来创建新资源:
请求URI处的资源对提供的实体执行某些操作。 POST通常用于创建新实体,但也可以用于更新实体。
但是,这是唯一的解决方法,因为您的请求有点不寻常。我建议您将List更改为其他任何内容,并且更简单地将其作为URL的一部分通过@RequestParam
进行传递。例如,您可能只需要这些对象的ID。然后,您可以使用GET
:
@RequestMapping(value="/cuttable", method=RequestMethod.GET)
public List<MyObject> getCusttableRecords(@RequestParam List<String> id) {
// ...
}
URL看起来像:
localhost:8080/cuttable?id=1&id=2&id=3
答案 1 :(得分:1)
您需要将@RequestBody添加到客户参数,并使用POST而不是GET。
@RestController
public class CusttableController {
@RequestMapping(value="/custtable", method=RequestMethod.POST)
public List<MyObject> getCusttableRecords(@RequestBody List<Custtable> customers) {...}
如果您仍然想使用GET方法,则可以执行以下操作:
@RestController
public class CusttableController {
@RequestMapping(value="/custtable", method=RequestMethod.GET)
public List<MyObject> getCusttableRecords(@RequestParam(name = "chooseAnAlias") List<Custtable> customers) {...}
,然后按以下方式拨打电话:
domain.com/custtable?chooseAnAlias=value1&chooseAnAlias=value2&.. chooseAnAlias = valueN
答案 2 :(得分:0)
尝试一下。
public List<MyObject> getCusttableRecords(@RequestBody List<Custtable> customers) {...}
您需要使用@RequestBody
答案 3 :(得分:0)
您不应发送带有GET
请求的请求正文。如果必须发送,请将请求方法更改为POST
@RestController
public class CusttableController {
@RequestMapping(value="/custtable", method=RequestMethod.POST)
public List<MyObject> getCusttableRecords(@RequestBody List<Custtable> customers) {...}
}
答案 4 :(得分:0)
您需要使用@RequestBody和contentType:“ application / json”