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