自动封装请求头中的数据

封装json数据 自动将json存入对应的实体类

前端除了传递请求类型,一般还会传递数据,比如将用户在页面表单填写的数据以json格式传给后端用于增删改查。

例图:VUE基于AXIOS实现异步请求,将json对象传给后端,json对象中存有请求类型type以及用户提交的表单数据

注意:该图仅用于说明json对象需要传递,下面说明文章主题时举例的是“修改”,不是这里图中的“添加”

传统的写法:

①在servlet中使用switch-case分配方法,此时与前端对接的servlet只是将编码格式进行一个设置,然后取出type判断需要执行的方法,直接将请求头和响应头发给当前servlet下的对应方法

②进入具体的方法后,才会正式开始解析请求头的数据,将数据取出存到一个实体对象中,然后再执行业务代码

新的写法:

现在新的写法中,希望做到的就是将各类方法中对请求头的数据解析和转换放回到servlet下,在servlet下完成数据的封装,然后再将对象和请求头、响应头传给方法。

实际上这也是实际的项目开发要做到的:

servlet作为控制层主要的工作就是数据处理,将请求头数据封装为对象,然后只传递对象给方法

方法实际都是存放在service下,只接受servlet发送的对象,然后进行逻辑处理,最后给servlet返回对象

例图:servlet只方法传递对象和一些数据,不传递请求头和响应头,而方法则将数据传给servlet,而不是直接用响应头去响应前端——响应交给servlet去完成。

注:这里的自定义注解用来标识当前方法的响应方法,用于父类servlet中的响应代码判断当前方法的数据回传给前端的方式,这个自定义注解的意思是“该方法的响应方式为AJAX”

因此要在父类servlet中实现自动对请求头的数据进行封装的功能,这样所有子类servlet都能具备这个功能

①实现了代码降重

②各子类servlet中更专注于对方法的调用,不再需要考虑对请求头的解析

③各子类servlet中的方法的参数表更规范——不再出现请求头和响应头

实现过程

  1. 首先判断此时读取到的方法参数需求是否是一个实体类,如果指向该参数类型的Class对象的全类名包含指定的地址,就表明是一个实体类
  2. 已知此时要处理的Class对象指向的是一个实体类对象,说明方法的参数表在此时需要传入一个实体对象,对应着前文即传入一个储存了json数据的对象
  3. 此时借助JAVA内置方法将json转为map集合,然后基于自定义工具类(实现原理为反射+泛型,具体原理点这里)将数据封装为实体对象,然后存到数组中

上图的操作中有两个地方可以进一步优化

① clazz.getName().contains("常量") 这里是通过判断Class对象指向的数据类型的地址是否包含指定常量,以判断此时的Class对象是否指向的是方法中的实体类

这里的常量令整个方法存在局限性,如果方法需要的对象不在现在指定的常量路径呢 如果别人使用时包名叫bean呢

这种情况就要进行优化

②使用了自定义的工具类将map集合存入实体对象,实际上从json数据转为实体对象,只需要借助第三方jar包就能实现

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值