如何在@RequestParam SpringBoot中获取未知的请求参数

时间:2018-11-28 16:59:02

标签: java spring-boot datatables

我正在尝试使用Spring Boot来实现数据表编辑器,但是客户端到服务器的数据在创建,更新和删除方面各不相同,甚至对于创建而言也并非恒定,并且取决于字段 到目前为止,我已经实现了这一点

@RequestMapping(value="/datatabledata" , method=RequestMethod.POST)
            @ResponseBody
            public String datatabledata(HttpServletRequest request)
            {
                Enumeration<String> params = request.getParameterNames(); 
                while(params.hasMoreElements()){
                 String paramName = params.nextElement();
                 System.out.println("Parameter Name - "+paramName+", Value - "+request.getParameter(paramName));
                }
                //System.out.println(data);
                //System.out.println(request.);
                //Map<String,String>ak=new HashMap<>();
                //ak.put("data", "hello ");
                return "done";
            }

上面的代码在控制台上显示以下输出以进行创建

Parameter Name - action, Value - create
Parameter Name - data[0][username], Value - dddddd
Parameter Name - data[0][date], Value - 2018-11-28
Parameter Name - data[0][balance], Value - dddddddddd

要进行编辑

Parameter Name - action, Value - edit
Parameter Name - data[5bfab595507af613f409c0c4][username], Value - four
Parameter Name - data[5bfab595507af613f409c0c4][date], Value - 2018-11-25
Parameter Name - data[5bfab595507af613f409c0c4][balance], Value - 9000.0

这里唯一的常数参数是action,所以我可以使用

@RequestParam("action")

但是如何获取剩余数据?像@RequestParam() String data

3 个答案:

答案 0 :(得分:0)

您可以创建一个DTO类,该类可以从请求中映射并可以进一步使用。

        @RequestMapping(value="/datatabledata" , method=RequestMethod.POST)
        @ResponseBody
        public String datatabledata(HttpServletRequest request)
        {
            UserDTO object = new ObjectMapper().setDateFormat(simpleDateFormat).readValue(request.getReader(), UserDTO.class);
            performYourOperation(object);
        }

答案 1 :(得分:0)

我看到我们应该在这里更丰富地利用REST。

因此,创建三种不同的控制器方法,包括创建,更新和删除,并将它们映射到不同的HTTP方法,如下所示:

//For Create. Take the parameter as (@RequestBody List<User>)
@RequestMapping(value="/datatabledata" , method=RequestMethod.POST) 
//For Update/Edit, Take the parameter as (@RequestBody List<User>)
@RequestMapping(value="/datatabledata" , method=RequestMethod.PUT)
//For Delete, Just take either list of ids or id to be delete. Nothiing else required 
@RequestMapping(value="/datatabledata" , method=RequestMethod.DELETE)

现在,您不需要action作为参数了。客户端只需要指定正确的http方法即可。

答案 2 :(得分:0)

您应该在端点中使用@RequestParam Map<String,String> allRequestParams

@RequestMapping(value="/datatabledata" , method=RequestMethod.POST)
@ResponseBody
public String datatabledata(@RequestParam Map<String,String> allRequestParams) {
   / ... rest of your code
}