zoukankan      html  css  js  c++  java
  • 个人技术博客——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详解

  • 相关阅读:
    jq判断input 复选框有没有选
    jq根据id替换修改或添加css属性
    cookie和session的关系和区别
    tp5 统一返回json格式
    tp5 上传图片(自定义图片路径)
    tp5 生成随机数
    tp5 删除图片以及文件
    tp5 上传视频方法
    tp5 跨域问题
    js替换div里的内容
  • 原文地址:https://www.cnblogs.com/supremacy/p/13132193.html
Copyright © 2011-2022 走看看