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

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

 function addRoomPic() {
var housingPic = document.getElementById("housingPic").value;
var remarks1 = document.getElementById("remarks1").value; if ( remarks1 == '' ) {
return ;
} document.getElementById("housingPic").value = "";
document.getElementById("remarks1").value = ""; $.post(
"${ctx}/housingresource/housingPics/ajaxSave",
{housingPic: housingPic, remarks:remarks1},
function (result) {
// ...
}
);
}

  Controller中代码如下:

 @RequestMapping(value = "ajaxSave")
@ResponseBody
public HousingPics ajaxSave(HttpServletRequest request) {
HousingPics hrp = new HousingPics();
hrp.setHousingPic(request.getParameter("housingPic"));
hrp.setRemarks(request.getParameter("remarks")); // ....
}

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

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

 @RequestMapping(value = "ajaxSave")
@ResponseBody
public HousingPics ajaxSave(@RequestBody HousingPics hrp) {
// ...
}

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

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

Unsupported Media Type 415

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

 function addRoomPic() {
var housingPic = document.getElementById("housingPic").value;
var remarks1 = document.getElementById("remarks1").value; if ( remarks1 == '' ) {
return ;
} document.getElementById("housingPic").value = "";
document.getElementById("remarks1").value = ""; $.ajax({
url:"${ctx}/housingresource/housingPics/ajaxSave",
dataType:"json",
contentType:"application/json",
type:"post",
data:JSON.stringify({housingPic: housingPic, remarks:remarks1}),
success:function(result) {
// ...
}});
}

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

 

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


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

@RequestBody注解用法的更多相关文章

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

    浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别 Spring 2.5 版本新增了注解功能, 通过注解,代码编写简化了很多:但熟悉注解的使 ...

  2. @RequestMapping 和@ResponseBody 和 @RequestBody和@PathVariable 注解 注解用法

    接下来讲解一下 @RequestMapping  和@ResponseBody 和 @RequestBody和@PathVariable 注解 注解用法 @RequestMapping 为url映射路 ...

  3. springMVC中@RequestParam和@RequestBody注解的用法

    springMVC中@RequestParam注解用在Controller层获解析.提取参数,当然你也可以用request.getParameter("name")来获取参数,而@ ...

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

    背景: 帮助同事解决文件上传的bug(文件上传成功,但是页面提示上传接口异常,数据的确是插入了),从前端layui页面找错误,然后浏览器调试,找了半天无果.layui文件上传格式code返回是数值,后 ...

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

    1.@RequestMapping 国际惯例先介绍什么是@RequestMapping,@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应 ...

  6. @requestBody注解的使用(下)

    提示: 建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基本知识常          识,可选择性跳过. 说明: @RequestBody主要用来接 ...

  7. 简单看看@RequestBody注解原理

    又到了很无聊的时候了,于是随便看看源码假装自己很努力的样子,哈哈哈: 记得上一篇博客随便说了一下RequestBody的用法以及注意的问题,这个注解作为非常常用的注解,也是时候了解一波其中的原理了. ...

  8. @requestBody注解的使用

    1.@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是ap ...

  9. @RequestBody注解的参数仅仅读取一次的问题解决。

    最近在写日志管理,想着使用拦截器加注解的方式,但是遇到了一个问题,就是如果使用@RequestBody注解接收的参数只能读取一次,造成了我在拦截器中如果接收了参数,在Controller层就接收不到了 ...

随机推荐

  1. CSS简介及基本知识

    (CSS)cascading style sheets:层叠样式表.级联式样式表,简称:样式表. Sheets :就是一个样式文件,它的扩展名为.css Style:外观,个性化 样式表的位置 为了学 ...

  2. Django小范围傻瓜总结

    1.母版: layout.html {% block x %}{% endblock %} 2.子版: {% extends 'layout' %} {% block x %}.......{% en ...

  3. web框架之Flask

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  4. LinuxMint18使用单独分区作为Home挂载点

    安装LinuxMint时,我没有为/home选择单独的分区,所以在安装完系统之后就得手动配置一番. 首先是创建一个分区,这个很简单就不说啦. 然后就是把现有的/home下的文件移动到新的分区里面 操作 ...

  5. 编程基础学习JS的入门教程

    将JavaScript 插入网页的方法 使用<script>标签在网页中插入Javascript代码. 插入JavaScript 与在网页中插入CSS的方式相似.使用下面的代码可以在网页中 ...

  6. java中的内部类概念

    内部类和外部类可以互相访问私有属性 1.普通内部类实例化方式 外部类.内部类 对象 = new 外部类().new 内部类(); class Outer{//外部类 private String ms ...

  7. [LeetCode] Circular Array Loop 环形数组循环

    You are given an array of positive and negative integers. If a number n at an index is positive, the ...

  8. [LeetCode] Non-decreasing Array 非递减数列

    Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...

  9. [LeetCode] Print Binary Tree 打印二叉树

    Print a binary tree in an m*n 2D string array following these rules: The row number m should be equa ...

  10. [LeetCode] Valid Square 验证正方形

    Given the coordinates of four points in 2D space, return whether the four points could construct a s ...