SpringMVC - @DeleteMapping 注解无法获取参数值及解决方案

简介: SpringMVC - @DeleteMapping 注解无法获取参数值及解决方案


最近在试试使用springboot编写一个demo进行测试,测试过程中发现@DeleteMapping注解有一些问题,现在汇总如下,有大神指点一下~

示例1

问题:无法获取参数id的值

@DeleteMapping(value="userinfo")
publicvoiddeleteUserinfo(Integerid) {
System.out.println("========= id : "+id);
this.dao.delete(id);
}

在spring-mvc中,经常使用上面的方法获取参数,无论是get还是post方法都可以获取的到,但是在springboot中这种写法得到的id却是null,然后方法就抛出异常,因为delete方法的参数值不能为null;为什么这种方式获取不到参数值呢?

示例2

问题:无法执行方法,无法获取参数值

@DeleteMapping(value="userinfo3")
publicvoiddeleteUserinfo3(@RequestParam("id") intid) {
System.out.println("========= id : "+id);
this.dao.delete(id);
}

在postman中进行的测试,无论是 form-data还是x-www-form-unlencoded类型,都无法进入方法体,连第一句打印都不执行,直接报400的错误,错误信息如下

{
"timestamp": 1505653583069,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.bind.MissingServletRequestParameterException",
"message": "Required int parameter 'id' is not present",
"path": "/userinfo/userinfo3"}

很不理解,put方法可以通过修改x-www-form-unlencoded方式,然后通过@RequestParam方法获取参数值,但是delee却不行,不知为何?

示例3

问题:获取不到参数值

@DeleteMapping(value="userinfo4")
publicvoiddeleteUserinfo4(Userinfouserinfo) {
System.out.println(userinfo);
this.dao.delete(userinfo);
}

在post方法中可以使用entity来接受参数,但是delete方法却不行;上面方法虽然可以执行到方法里面,第一行打印也有内容,但是userinfo对象是空的,没有获取到任何参数,不知为何!

后台日志如下:

{"age":0,"id":0}
Hibernate: insertintouserinfo (age, cup_size, name) values (?, ?, ?)
Hibernate: deletefromuserinfowhereid=?

极其匪夷所思,我只是执行了一个delete操作,为什么日志会打印insert into 语句呢?

示例4

问题 : 无法获取参数值,方法直接进不到方法体中

@DeleteMapping(value="userinfoMap")
publicvoiddeleteUserinfoMap(@RequestBodyMap<String, String>map) {
System.out.println(map);
}

示例5

@DeleteMapping(value="userinfo/{id}")
publicvoiddeleteUserinfo2(@PathVariable("id") intid) {
System.out.println("========= id : "+id);
this.dao.delete(id);
}

上面的5个例子,只有这种情况下,通过restful的方法才能获取deletemapping的参数值,实在是费解。

另外的一个问题

在示例5中,delete操作竟然不能执行2次,当第二次执行的时候,由于数据已经被删除,导致程序直接抛出异常,错误信息如下

{
"timestamp": 1505654465700,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.dao.EmptyResultDataAccessException",
"message": "No class com.zzg.springboot.firstbootweb.entity.Userinfo entity with id 2 exists!",
"path": "/userinfo/userinfo/2"}

总而言之

就是@DeleteMapping注解无法对 form 参数进行参数解析的问题,但是面对 @RequestBody 无法进行参数分解问题。当然下面是我自己写的参数解析注解 @RequestJson(基于Spring)。


参考链接:SpringMVC - @RequestJson之HandlerMethodArgumentResolver 从入门到青铜


目录
相关文章
|
2月前
Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】
Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】
|
2月前
【SpringMVC】解决方案:获取请求参数乱码的问题 (POST方式请求参数乱码)
【SpringMVC】解决方案:获取请求参数乱码的问题 (POST方式请求参数乱码)
49 1
Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】
Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】
|
前端开发 Java 程序员
SpringMVC接收参数中文乱码解决方案
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
81 0
SpringMVC接收参数中文乱码解决方案
|
应用服务中间件
springmvc 上传图片中文乱码解决方案
springmvc 上传图片中文乱码解决方案
128 0
springmvc 上传图片中文乱码解决方案
|
前端开发 Java 应用服务中间件
springMVC向Controller传值出现中文乱码的解决方案
springMVC向Controller传值出现中文乱码的解决方案
springMVC向Controller传值出现中文乱码的解决方案
|
JSON 前端开发 Java
SpringMVC:请求乱码问题处理和json乱码解决方案
SpringMVC:请求乱码问题处理和json乱码解决方案
SpringMVC:请求乱码问题处理和json乱码解决方案
|
JSON 前端开发 fastjson
关于SpringMVC返回数据带斜杠字符串问题之解决方案
常用SpringMVC的基本都知道,@RestController和@ResponseBody加上了都会返回json数据。它们的区别主要是注解方面,一个是类级别的一个是方法级别。 之前我们比较喜欢使用@ResponseBody,后来觉得重复性太多了,特别是使用swagger以后,一个方法上面关注解就上了4到5层,为了减少这些繁杂的过程,我们就采取简洁策略,因为都是基于前后端分离开发,前端展示也不打算使用诸如jsp、freemarke、volocity等模板语言。
1914 0