【服务器端】逻辑梳理

SpringMVC+RESTful的使用

我们搭建后台服务的整体框架是SpringMVC,设计风格是RESTful,下面就来学学SpringMVC,RESTful

@RestController注解与@RequestMapping注解
@RestController,作用于类上,用于声明这是一个Controller,也就是MVC中的C层
@RequestMapping("/home"),作用于类内具体方法上,对相应的URL请求进行映射

SpringMVC+RESTful的使用总结

SpringBoot是Spring家族的一个集合,集成了Spring,SpringMVC等等,而Spring家族框架的特色就是使用注解开发。

RESTful就是一种访问资源的风格,也就是浏览器地址栏输入的风格:
1. 原始风格:http://localhost:8080/home.html或者http://localhost:8080/home.jsp ,带后缀名
2. RPC风格(Doubble):http://localhost:8080/print.home ,带方法调用
3. RESTful风格(SpringMVC):http://localhost:8080/home ,啥都不带,最多会有?parm=value加个参数之类的

用户注册流程

用户填写viewobject-->转化为model-->拆分为dataobject-->通过DAO插入数据库

Controller层:传递用户填写的数据给Service层,要考虑信息安全性,对于用户敏感信息,诸如密码之类,一定不能明文存到数据库,一定要在Controller层进行加密然后再传递给Service层,执行插入数据库操作。

Service层:具体的逻辑判断,且要注意有判空处理

用户登录流程

用户填写viewobject-->转化为model-->拆分为dataobject-->通过DAO在数据库中进行查询操作

查询密码的时候,需要修改两个文件(Mybatis自动生成的只有selectByPrimaryKey)

  1. UserPasswordDOMapper.xml 添加 selectByUserId

  2. UserPasswordDOMapper.java 添加 selectByUserId

UserPasswordDOMapper.java中的方法与UserPasswordDOMapper.xml 中数据库CURD语句一一映射。

整体架构分层

1. DAO层 --- dataobject,与数据库一一映射
2. Service层 --- model,整合因业务需求而分离的dataobject
3. Controller层 --- viewobject,屏蔽如密码等敏感信息返回给前端

URL请求发送到Controller层,

Controller层调用Service层;从Service层获取到model,但具体方法需要具体使用。比如Controller层的getUser方法,前端发送localhost:8090/user/get请求,请求用户信息。前端没必要知道用户的密码,登录方式等敏感信息。因此就需要一个viewobject层,用来在返回给前端时屏蔽掉敏感信息。

Service层调用DAO层;在设计数据库的时候我们因为业务需求,把用户信息和密码进行了分表设计,这样就会导致出现UserDO和UserPasswordDO两个dataobject。Service层需要做的工作就是将这两个DO整合到一起并封装为model。

DAO层通过Mybatis的mapping映射进行数据库的CURD操作

对整体架构分层总结:

Controller层需要在类级别加上@Controller(…)、@RequestMapping(…)、@CrossOrigin(…)

Service层只需要在类级别加上@Service

对于Controller,注解加载子类上,BaseController不需要

对于Service,注解加载实现类上,UserService接口不需要

Controller中方法的返回值与类型

我们知道,Controller层返回值是返回给前端页面的。

然而Controller中的方法返回值类型会出现不同,比如返回viewobject,返回null,返回异常Exception信息等等。如果每个方法都有独自的返回值类型的话,那样的设计不太好,也不容易以统一的形式(比如统一的JSON格式)呈现给前端。好的解决方法就是独立出一层:response,创建一种通用的返回值类型CommonReturnType,它有两个属性status和data。

status:success表示成功,fail表示失败;

data:会根据具体业务的不同返回正确信息viewobject或异常信息(异常信息包含errorCode和errorMsg)或空。

对返回值与类型的总结:

  1. CommonReturnType有自己独立一层:response
  2. CommonError、BusinessException、EmBusinessError也都有独立一层:error
  3. CommonError是一个接口,有两个实现类一个是BusinessException,它继承自Exception另一个EmBusinessError,它是一个枚举类,指定了具体的errorCode和errorMsg属性值,用来构造BusinessException对象。
  4. BusinessException具体异常具体分析,其他非BusinessException异常统一为未知错误。
  5. 这些异常不只在UserController会发生,因此将异常抽象到BaseController中,其他Controller都继承BaseController,实现代码复用。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值