有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我已经写了这段代码,但是在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 {

共 (3) 个答案

  1. # 1 楼答案

    Request参数实质上是将请求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)
            {
                ....
            }
    

    与其将列表作为请求参数传递,不如尝试将其作为请求正文的一部分提供。复杂对象最好作为请求体发送。比如:

        @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 {
    
  2. # 2 楼答案

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

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

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

  3. # 3 楼答案

    使用@Valid @RequestBody List<KPIReq> kpiReqList作为列表。可能是json中的错误