@RequestBody注解用法

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

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

 1 function addRoomPic() {
 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 @ResponseBody
3 public HousingPics ajaxSave(HttpServletRequest request) {
4     HousingPics hrp = new HousingPics();
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 @ResponseBody
3 public HousingPics ajaxSave(@RequestBody HousingPics hrp) {
4     // ...
5 }

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

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

Unsupported Media Type 415

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

 1 function addRoomPic() {
 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({housingId: housingId, housingPic: housingPic, remarks:remarks1}),
18        success:function(result) {
19            // ...
20        }});
21 }

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

 

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

原文地址:https://www.cnblogs.com/tosser/p/8970730.html

时间: 2024-10-12 23:31:29

@RequestBody注解用法的相关文章

@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

[email protected] 国际惯例先介绍什么是@RequestMapping,@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径:用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法,此处需注意@RequestMapping用在类上可以没用,但是用在方法上必须有. @RequestMapping("/verifyCode") public void verifyCod

浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

首先,大家在使用SSM框架进行web开发的时候,经常会在Ctrl层遇到@RequestMapping.@ResponseBody以及@RequestBody这三个参数,博主就以自己在项目开发中总结的一些知识点浅谈一下三者之间微妙的关系. [email protected] 国际惯例先介绍什么是@RequestMapping,@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径:用于方法上,表示在类的父路径

@requestBody注解的使用

1.@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等.一般情况下来说常用其来处理application/json类型. 2. 通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上. 例如说以下情况: $.ajax({ url:"/login",

springmvc中@requestbody注解接收请求参数

一.POST请求的四种常用方式 1.application/x-www-form-urlencoded 浏览器原生的表单,值为urlencoded之后的  key1=value1&key2=value2...... 2.multipart/form-data 浏览器原生的文件表单,用于传输文件 3.application/json 常用的请求头格式,值为json串  {"key1":"value1","key2":"value2

java注解 @SuppressWarnings注解用法

@SuppressWarnings注解用法 @SuppressWarnings注解主要用在取消一些编译器产生的警告对代码工具左侧行列提示,但这种警告可以通过注释类型声明来取消 @SuppressWarnings常用的注解的使用有三种: 1. @SuppressWarnings("unchecked") [抑制没有进行类型检查操作的警告] 2. @SuppressWarnings("unchecked","rawtypes") [抑制多类型的警告]

springMVC的@RequestBody注解使用

如果没有特殊的设置,无论用什么样的http请求方法,只要携带body参数,用@RequestBody都是可以获取到body的内容的 参数是json字符串格式,使用方式有两种 @RequestBody只有一个属性,required默认等于true,如果不设置required属性,就默认必须传body体,否则会报400错误,如果设置了body体,但是没有设置header或者设置了header:content-type!=application/json ,会报415错误 第一种:使用@Request

@PathVariable注解和@RequestBody注解

@PathVariable注解的作用.获取请求地址中传递的参数 @RequestBody注解的作用.将请求中的json封装到对象中. 原文地址:https://www.cnblogs.com/jtfr/p/10360564.html

Java注解用法[email protected]

Java注解用法[email protected] 参考地址:https://www.cnblogs.com/perfei456/p/8962167.html 1.注解目标 通过 @SuppressWarnings的源码可知,其注解目标为类.字段.函数.函数入参.构造函数和函数的局部变量.建议注解应声明在最接近警告发生的位置 2.抑止警告的关键字 3.代码示例 示例1--抑制单类型的警告: 1 @SuppressWarnings("unchecked") 2 public void a

@RequestBody注解的用法

以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象.然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串.同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样