繁体   English   中英

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

[英]How to get unknown request parameter in @RequestParam SpringBoot

我正在尝试使用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

您可以创建一个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);
        }

我看到我们应该在这里更丰富地利用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方法。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM