requstbody注解_@RequestBody注解用法

做Java已经有8个多月了,但是基本没有学习过Java语言,因此在项目中写代码基本靠的是其他语言的基础来写Java代码,写出来的很多代码虽然能用,但是感觉很不地道,虽然从来没有同事说过,但是我自己觉得是,因为我经常用下中国象棋的套路去下国际象棋。

在手头的项目用的SSM的框架,其中有用到Ajax的地方不少,方法是再简单不过了,在Ajax中对指定的URL提交参数,然后在Controller里通过request.getParameter()方法来接收参数。代码差不多就像下面的结构,Ajax的代码如下:

1 functionaddRoomPic() {2 var housingPic = document.getElementById("housingPic").value;3 var remarks1 = document.getElementById("remarks1").value;4

5 if ( remarks1 == '') {6 return;7 }8

9 document.getElementById("housingPic").value = "";10 document.getElementById("remarks1").value = "";11

12 $.post(13 "${ctx}/housingresource/housingPics/ajaxSave",14 {housingPic: housingPic, remarks:remarks1},15 function(result) {16 //...

17 }18 );19 }

Controller中代码如下:

1 @RequestMapping(value = "ajaxSave")2 @ResponseBody3 publicHousingPics ajaxSave(HttpServletRequest request) {4 HousingPics hrp = newHousingPics();5 hrp.setHousingPic(request.getParameter("housingPic"));6 hrp.setRemarks(request.getParameter("remarks"));7

8 //....

9 }

这样的做法没有错,看着也比较直观,对于我这个用其他语言讨论来写Java代码的人来说,这样已经很好了。难道还有更好的方法吗?事实证明,无知会自大。

在Spring中有一个注解可以方便的获取以Json形式提交的参数,并且可以把各个参数直接...直接...直接设置到一个对象中(犹豫的表达出自己不一定正确的用于),这个注解就是该文章标题中的@RequestBody了。修改项目中的代码,修改后的Controller如下:

1 @RequestMapping(value = "ajaxSave")2 @ResponseBody3 publicHousingPics ajaxSave(@RequestBody HousingPics hrp) {4 //...

5 }

在此处,传递的两个参数已经被@RequestBody注解直接设置到对象中了,方法中实例化对象,接收参数的过程就免掉了。

修改完Controller以后,直接进行测试,发现并没有得到预期的效果,那么在修改后的方法中下断。再次测试,但是竟然没有被断下,那么就在浏览器中进行调试,调试发现提示415报错,提示类似如下:

Unsupported Media Type 415

该问题因为传输的数据格式不太对,那么就修改Ajax请求的方式,代码如下:

1 functionaddRoomPic() {2 var housingPic = document.getElementById("housingPic").value;3 var remarks1 = document.getElementById("remarks1").value;4

5 if ( remarks1 == '') {6 return;7 }8

9 document.getElementById("housingPic").value = "";10 document.getElementById("remarks1").value = "";11

12 $.ajax({13 url:"${ctx}/housingresource/housingPics/ajaxSave",14 dataType:"json",15 contentType:"application/json",16 type:"post",17 data:JSON.stringify({housingPic: housingPic, remarks:remarks1}),18 success:function(result) {19 //...

20 }});21 }

在代码中,另外增加了dataType和contentType两个Http的标识,对data数据进行了json格式的转换。修改后再次测试,这次OK了。

相对的,在接收Json格式后需要设置入对象中使用@RequestBody注解,如果要将返回的对象转换为Json格式,需要使用@ResponseBody注解即可。

我的微信公众号:“码农UP2U”

117c4ff62b329f9b67cf7ccff84301d0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值