一、技术概述
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。通过面向接口编程,将使用接口的复杂度降低到零,使得JavaEE的开发更加简单。难点如何正确获取前端发送的请求参数。
二、技术详述
前端传单个或者多个非JSON对象的参数时,可直接通过@RequestParam来对应前端的参数名进行获取。
若前后端参数同名,则无需附加前端参数信息,直接用即可
当前端传整个JSON对象到后端时,Spring可以通过@RequestBody来接收。
若前端传过来的数据后端有对应的对象存储,直接用此对象作为参数即可。
若后端无对应参数,可新建VO类,对应前端显示的数据类型。
也可将参数设置为Map,通过get(key)的方式取得各个参数,再一一赋值。
对于返回的部分也一样,很多时候前端需要从控制层直接返回数据,可以新增JSON工具类进行处理,将返回结果进行一定的格式约定,再返回给前端。
以下是我们约定的返回格式:
将大多数方法设为静态方法,可直接通过类来调用,不再需要实例化对象。
此外,对于返回值,还可通过Model、ModelMap以及ModelAndView来处理
1、Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类
2、ModelMap继承LinkedHashMap,spring框架自动创建实例并作为controller的入参,用户无需自己创建
3、顾名思义,ModelAndView指模型和视图的集合,既包含模型 又包含视图;ModelAndView的实例是开发者自己手动创建的,这也是和ModelMap主要不同点之一
由于在此次项目中没有用到Model,在此不放代码截图,具体可以参考第五部分的引用。
三、技术问题
一开始不知道如何对前端传过来的JSON数据进行较好的处理,上网查阅资料的方向也有点偏差,所以一开始是通过解析JSON对象进行的。
这样做确实较为简便,但是代码的可读性不够好,而且对于常用的前端传来的对象而言,需要一直在controller中进行提取数据,这效率是十分低下的。
后来通过进一步学习才了解到,较为成熟且正切的做法是如第二部分所说的,定义一个VO类来处理或者通过Map来处理。
此外,在使用Postman测试接口的时候,直接传参和传data body进来也是有所不同的,起初也是由于没有经验,在这里踩了很多坑。
当接口为直接传参的时候,postman应在Params中填写参数
若接口为传JSON对象,则需要在Body中填写请求对象,这样才会有正确的响应。
四、总结
此篇博客的内容是Spring中较为基础的部分,对于那些能够熟练使用的人来说较为简单,但对于刚开始学习并使用Spring框架的程序员来说,这些往往是会纠结很久的、会踩到的坑。总体来说,只要掌握其中对于不同参数类型不同的处理方法,就不会有太大的难点。
五、参考
Spring获取request对象的几种方式
SpringMVC Controller介绍及常见注解
Spring中Model详解