个人技术博客——Spring中Controller的传参与返回值处理

一、技术概述

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详解

原文地址:https://www.cnblogs.com/supremacy/p/13132193.html