springboot使用DELETE传输参数后台得不到的问题

it2022-05-05  160

今天在写一个接口的时候,使用了DELETE传输方式,本人这边使用postman测试传输id各种没问题,然后就交给测试去测试了 测试哥哥使用页面ajax发送请求测试了半天数据也删除不掉,排查发现是传参没有传输进来,传参为null 源码

@RequestMapping(value="/deleteXXX",method = RequestMethod.DELETE) @ResponseBody public ResponseModal deleteXXX(XXX axxx){ return uiXXXService.deleteXXX(axxx); }

究其原因是因为tomcat处理参数会将参数封装为map,但是DELETE和PUT请求方式除外(…) 所以我们需要简单处理一下 在方法体形参前加入一个@RequestBody就可以解决问题 需要导包:import org.springframework.web.bind.annotation.RequestBody;

@RequestMapping(value="/deleteXXX",method = RequestMethod.DELETE) @ResponseBody public ResponseModal deleteXXX(@RequestBody XXX axxx){ return uiXXXService.deleteXXX(aXXX); }

第二种方式:后台添加工具类获取所有参数

不仅仅是DELETE,开发的时候又发现很多时候实体类接收之外,还有一些额外的参数需要接收,一不做二不休弄了一个工具类,获取所有的参数,返回类型是一个map

工具类实现代码如下

// 首先你要在你的方法接收上加入一个request public ResponseModal deleteXXX(HttpServletRequest request){ Map map = MapUtil.getParameterValue(request); return ResUtil.success(topoService.deleteXXX(map)); }

map会接收所有页面传过来的参数,工具类实现代码如下

public class MapUtil { public static Map getParameterValue(HttpServletRequest request){ Map map = new HashMap(); //这里Enumeration可以理解为String集合的迭代器 Enumeration<String> paraNames=request.getParameterNames(); for(Enumeration e = paraNames; e.hasMoreElements();){ String thisName=e.nextElement().toString(); String thisValue; try { thisValue = request.getParameter(thisName); if(!thisValue.contains("%")){ thisValue= java.net.URLDecoder.decode(request.getParameter(thisName),"UTF-8"); } map.put(thisName, thisValue); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } } return map; } }

使用该工具就可以获取所有传过来的参数了。

无论文章还是程序都是不断改正才能趋于完美,如果文章有什么错误,欢迎指正 一个bug的解决方式是与很多种的,也可能因为开发环境不同而出现差异。 希望这篇文章对你有帮助


最新回复(0)