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

今天在写一个接口的时候,使用了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的解决方式是与很多种的,也可能因为开发环境不同而出现差异。
希望这篇文章对你有帮助

你可能感兴趣的:(随手记)