• 个人技术博客——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详解

  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/supremacy/p/13132193.html
Copyright © 2020-2023  润新知