前言:在各类网站论坛上,没有找到与工作比较贴切的技能,所以特此写一些对刚步入工作或者工作中没有重视的技能与问题,各位大牛请及时关闭文章.
ps1:文中所有标点都是英文的,看官请不要在意.为了便于平时敲代码,所以中文输入法也默认了英文标点(防止各类因为标点引起的低级错误).纯属个人原创见解,若不正确,请各位批评指正.
ps2:读懂本文,你可能需要具备对JSON格式对象的理解,以及SpringMVC中Controller的作用
这边我统一以SpringMVC框架为例进行讲解参数封装方法,我只介绍最常用的几种请求方式(因为其他请求方式不经常使用,所以不作为本文重点).如果文中介绍到的内容有不明白的,敬请留言评论.
java
大多数情况,我们都是通过ajax方式进行提交复杂对象进行插入或更新操作,下面我们举个例子接着上一篇继续介绍封装复杂参数的其他方式我们的需求是 : 在一个请求中将某一个学生信息,该学生的语数外三门成绩以及该学生的老师信息同时传入后台.
学生类如下:(学生包含多个成绩)
学生类
成绩类如下:
成绩类
教师类如下:
教师类
接受请求参数的Controller方法如下:
Controller方法
ajax方式封装复杂对象(一)
在测试页面中直接编写一个ajax请求,将请求参数封装成我们需要的格式,如下:
ajax封装复杂参数
我们测试效果如下:
断点查看效果
总结:ajax方式封装参数使用Json数据格式,List使用[obj1,obj2],任意对象使用{key1:value2,key2:value2},对象可以嵌套对象
需要使用JSON.stringify()方法将json对象转换成json字符串
ajax的contentType属性必须是'application/json;charset=utf-8'
在接收参数前面需要加上SpringMVC的@RequestBody注解
ajax方式封装复杂对象(二)
如果我们并没有一个合适的对象来接受我们的参数时,我们可能需要封装到Map中,那么我们需要修改接收请求的Controller方法,如下图:
参数封装成一个大Map
前台ajax参数封装格式一致,无需变更,如下图:
ajax参数封装到map中
我们测试效果如下(正确封装了一个复杂的Map对象):
断点查看map中参数
总结:(其实Map与我们自定义的类是一样的道理)ajax方式封装参数使用Json数据格式,List使用[obj1,obj2],任意对象使用{key1:value2,key2:value2},对象可以嵌套对象
需要使用JSON.stringify()方法将json对象转换成json字符串
ajax的contentType属性必须是'application/json;charset=utf-8'
在接收参数前面需要加上SpringMVC的@RequestBody注解
与封装到自定义类的区别:Map取值通过我们约定好的key来取,而类通过自己的属性名来取
ajax方式封装复杂对象(三)
同样,如果我们并没有一个合适的对象来接受我们的参数时,我们也不想使用Map时,那么我们还可以使用字符串来接受复杂的JSON字符串,那么我们需要修改接收请求的Controller方法,如下图:
定义字符串接受json对象字符串
(注意:上图中,我们还用到了Gson这个对象,它是用来处理json字符串与具体的java对象互相转换问题的)
同时我们需要修改jsp中发送请求的ajax方法,如下图:
ajax请求参数封装方法三
总结:ajax方式封装参数使用Json数据格式,List使用[obj1,obj2],任意对象使用{key1:value2,key2:value2},对象可以嵌套对象
需要使用JSON.stringify()方法将json对象转换成json字符串,并将该负责的json字符串作为value形成新的json格式的参数对象,如上图中{stuJsonStr:负责json字符串}
Java后台中,需要将接收到的json字符串使用Gson(或者JSONObject等)第三方类转换成我们需要的具体对象.
结尾ps:
小编花了不少时间编写例子,为了突出代码中的关键字,因此采用截图方式,希望各位同学看后能够利用在自己的项目中,或者自己参考编写文中的例子深刻理解一下.若文中有不能理解的地方请留言评论.