Java 如何在SpringBoot中使用@RequestBody传递列表和单独的字符串

Java 如何在SpringBoot中使用@RequestBody传递列表和单独的字符串,java,spring,spring-boot,http,spring-mvc,Java,Spring,Spring Boot,Http,Spring Mvc,我已经编写了这段代码,但是在JSON中获得状态:400错误请求错误 @CrossOrigin @PostMapping(value = "/retail/scorecard/addKPI", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) public @ResponseBody Object addKpi(@Valid @RequestParam List<KPIReq

我已经编写了这段代码,但是在
JSON中获得状态:400错误请求错误

@CrossOrigin
    @PostMapping(value = "/retail/scorecard/addKPI", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
public @ResponseBody Object addKpi(@Valid @RequestParam List<KPIReq> kpiReqList,@RequestParam("goalId") String goalId,
        HttpServletRequest req, HttpServletResponse res) throws RecordNotFoundException, Exception {
@CrossOrigin
@PostMapping(value=“/retail/scorecard/addKPI”,使用={MediaType.APPLICATION\u JSON\u value,MediaType.APPLICATION\u XML\u value})
public@ResponseBody对象addKpi(@Valid@RequestParam List kpiReqList,@RequestParam(“goalId”)字符串goalId,
HttpServletRequest请求,HttpServletResponse res)引发RecordNotFoundException,Exception{

对您的列表使用
@Valid@RequestBody List kpiReqList
。可能是json中的错误。

您的错误是400个错误请求,这意味着您的函数有一个类型为X的对象,但没有收到它,您能尝试为您添加名称吗

 @RequestParam(name = "kpiReqList")  
 @RequestParam(name ="goalId")

列表的类型和id是Json还是XML?

请求参数基本上将请求uri的一部分映射到一个对象。与uri类似:

http://localhost/api/v1/search?type=11&type=12&color=RED&color=GREY
您可以将其映射为:

        public @Responsebody Object addKpi(
        @RequestParam(value="type", required=false) List<String> types,
        @RequestParam(value="color", required=false) List<String> colors)
        {
            ....
        }
public@Responsebody对象addKpi(
@RequestParam(value=“type”,required=false)列表类型,
@RequestParam(value=“color”,required=false)列表颜色)
{
....
}
与其将列表作为请求参数传递,不如尝试将其作为请求正文的一部分提供。复杂对象最好作为请求正文发送。例如:

    @CrossOrigin
    @PostMapping(value = "/retail/scorecard/addKPI", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
    public @ResponseBody Object addKpi(@Valid @RequestBody List<KPIReq> kpiReqList,@RequestParam("goalId") String goalId,
            HttpServletRequest req, HttpServletResponse res) throws RecordNotFoundException, Exception {
@CrossOrigin
@PostMapping(value=“/retail/scorecard/addKPI”,使用={MediaType.APPLICATION\u JSON\u value,MediaType.APPLICATION\u XML\u value})
public@ResponseBody对象addKpi(@Valid@RequestBody List kpiReqList,@RequestParam(“goalId”)字符串goalId,
HttpServletRequest请求,HttpServletResponse res)引发RecordNotFoundException,Exception{

您可以添加您的请求和错误日志吗?添加您的json请求,如果您发布任何查询,它必须更足以回答。