-
springboot项目实战笔记
查看全部 -
dataobject和model的区别:dataobject仅仅是映射数据库;model是业务模型,该模型的属性会来自于多个数据库
查看全部 -
课堂笔记:
3.8 用户模型管理--getotp页面实现(16:00) 1. 完成 getotp.html 页面样式的编写。 2. 完成 button 提交业务的编写 先实现页面交互,再实现页面美化。 a. 引入 jquery.js b. 编写 js 代码,实现 button 的 click 事件,用于向后端发送获取短信验证码的请求。 // 绑定 otp 的 click 事件用于向后端发送获取短信验证码的请求 // 使用 ajax 方式发送异步请求完成业务。 // 为 Controller 中的 @RequestMapper 添加指定的 method,consumes(将其声明到控制层基类中) // 注意判空处理 // 注意 button 自定义 click 方法后,该方法内应该返回 false,因为使用 ajax 发送请求处理业务,不需要常见的事件冒泡给 form 提交 POST 方法。 // 注意程序中已经进行了统一异常处理,因此会尽可能返回了 success HTTPstatus = 200 c. 因为是从本地 html 中发送请求到 localhost 的 url 因此会出现跨域安全异常,虽然请求能够到达控制层,并成功被控制层方法处理业务并返回,但是 ajax 请求会认为该请求是不安全的,因此走不到 success 块中,并会给浏览器报错。 在 springboot 中处理 ajax 跨域请求的方式:只要让 response 时刻返回 'Access-Control-Allow-Origin' 为所有的域,即 * 即可。 SpringBoot 提供给我们一个简单注解方式 @CrossOrigin 实现所有 SpringBoot 中所有请求返回对象带上一个 Access-Control-Allow-Origin 标签,即可实现跨域处理。 @CrossOrigin 可使用在 controller 上,或方法级别上,也可以同时使用,Spring将合并两个注释属性以创建合并的CORS配置。 该注解可以有2个参数: origins :允许可访问的域列表 maxAge:准备响应前的缓存持续的最大时间(以秒为单位)。 3. Ajax跨域请求问题,设置一下属性就可以了, 前端 Ajax 请求中添加 xhrFields: {withCredentials: true}, 后端 controller 层添加 @CrossOrigin(origins = "*", allowCredentials = "true") 就可以访问了
查看全部 -
课堂笔记:
3.6 用户模型管理-otp验证码获取 0. 基础能力建设 springboot + MVC + mybatis 框架搭建,外加常态的错误异常定义、正确的返回值类型定义。 模型能力管理 领域模型管理(如 user 对象就是一个用户领域的一个模型),包括完整的生命周期。用户模型、商品模型、秒杀模型等。 用户信息管理: otp 短信获取 otp 注册用户 用户手机号登录 1. 用户获取 otp 短信验证码 a. 需要按照一定的规则生产OTP 验证码 b. 将 OTP 验证码通对应用户的手机号关联(一般使用Redis处理,此处采用 session 模仿实现) 使用 spring 注入方式注入一个 HttpServletRequest 对象,该对象其实是通过 spring bean 包装的 request 对象本质是 proxy 模式(spring 在注入 HttpServletRequest 时,发现如果注入的是 一个 ObjectFactory 类型的对象时,就会将注入的 bean 替换成一个 JDK 动态代理对象,代理对象在执行 HttpServletRequest 对象里的方法时,就会通过 RequestObjectFactory.getObject() 获取一个 新的 request 对象来执行。),即多例模式?。 Spring能实现在多线程环境下,将各个线程的request进行隔离,且准确无误的进行注入,奥秘就是ThreadLocal. 它的内部拥有 ThreadLocal 方式的 map,去让用户在每个线程中处理自己对应的 request 中的数据,并且有ThreadLocal清除的机制。 c. 将 OTP 验证码通关短信通道发送给用户
查看全部 -
3.5 定义通用的返回对象-异常处理02 1. 为 handlerException() 方法继续添加 @ResponseBody 注解即可将返回的 object 返回给前端页面。 该方式会将异常的所有栈信息序列化后输出到前端页面,因此还需要继续处理,只将前端需要的异常信息返回给前端。 2. 将 ex 强转为 BusinessException ,然后使用其 getErrCode、getErrMsg 方法获取前端需要的异常信息,将其封装为 Map 后封装到 CommonReturnType 对象中,然后再返回给前端。 3. 优化:使用 CommonReturnType 的静态方法 create 构造对象并返回。 4. 继续完善该方法。 判断 exception 是否为 BusinessException 类型,如果不是则为 CommonReturnType 对象赋值 errCode 为 EmBusinessError 枚举中的 UNKNOWN_ERROR 的 code 和 msg。 5. 继续优化异常处理。 因为该处理方式是所有 controller 都需要的方式,因此将其抽象为 BaseController 中的方法,然后让其他 controller 组件去继承该 controller。 6. 总结:a. 定义一个 CommonReturnType, 能够用对应的 status, object 的方式返回所有的被 JSON 序列化对象,供前端解析使用,摒弃掉了使用 httpstatuscode + 内线 tomcat 自带的 error 页面方式去处理响应数据以及异常。 b. 并且定义了一个 BusinessException ,统一管理我们自定义的错误码。 c. 然后,在 BaseController 中定义一个所有 Controller 的基类,使用其中注解了 @ExceptionHandler 的方法来处理所有被 Controller 层捕获的异常。 按照异常的种类由2种处理方式,一种是自定义 BusinessException, 其中有自定义的 error 的 code 和 msg,一种是未知的异常,采用统一处理方式。 d. 异常处理方法上还可以添加日志相关组件,方便项目运行记录与错误排查。
查看全部 -
Enum 中的 int 类型的状态码,如果以 0 开头,则会在 controller 组件中返回到前端时,如果使用了 JSON 序列化,解析时则会省略数字前的 0,因此,不应该使用 0 开头。
正例:10001、10002、20001
反例:00001、00002
查看全部 -
3.2 定义通用的返回对象-返回正确信息 1. 通用的返回对象。方便前端解析数据。 首先,定义返回对象类型 class com.miaoshaproject.response.CommonReturnType, 包含 String status, Object date 2个属性。 然后,定义 二重奏创建对象方法, create(Object result)-(该方法中如果没给 status 参数则给出默认值"success") 调用 create(Object result, String status), 2. 返回的数据为 Object 对象。 若 status = success ,则返回前端需要的 JSON 数据。 若 status = fail , 则返回通用的错误码格式。 3. 修改 controller 层中的方法,将返回值修改为 CommonReturnType 类型的对象。 4. 查看运行效果。
查看全部 -
3.1 使用SpringMVC方式开发用户信息 1. 搭建 MVC 层次组件 创建 controller 层目录,并编写 UserController,包含一个 getUser(Integer id) 方法,注意添加注解。 创建 service 层目录,并编写 UserService 接口以及 UserSServiceImpl 实现类,包含 getUserById(Integer id) 方法,其中使用了 UserDOMapper. 2. 除了 UserDO 表示与数据库对应的数据对象类外, service 层业务领域也应该有与 DO 对象不同的对象 model, 即业务领域对象,用来封装 DO 对象,避免直接将 DO 对象返回给前端。 创建 service 层领域模型对象: com.miaoshaproject.service.model.UserModer, 其中封装从 DO 到 model 封装方法。 为 userPasswordDOMapper 添加 selectByUserId(Integer id) 方法,实现通过用户 id 查找对应的用户加密密码信息。 3. 编写 userController 中的 getUser() 方法,返回领域模型 userModel, 测试是否可以通过前端成功访问。 4. 创建一个前端模型对象 UserVO, 用来封装可以返回给前端的对象数据信息,不包含前端非必要属性字段。其中包含 convertFromModel(model) 方法,用来将核心领域模型 model 对象封装成可供前端使用的 VO 对象。 5. 需要注意的是 DO、VO、Model 对象中的属性类型必须一致,字段名同样要一致,才可以使用 BeanUtils.copyProperties(srcObj, tarObj) 方法,否则会丢失不一致属性中的数据。
查看全部 -
2.4 Mybatis自动生成器的使用方式 1. mybatis-core版本要和mybatis-maven-plugin版本要一致 2. mybatis-generator.xml 中的配置 3. 配置 maven Command line : mybatis-generator:generate -e -X 注意 : generate 前是 : 4. 生成后,需要给 mapper 接口添加注解 5. application.properties 中添加数据源配置 # 接入 mybatis 对应的数据源 spring.datasource.name=miaosha spring.datasource.url=jdbc:mysql://127.0.0.1:3306/miaosha?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false spring.datasource.username=root spring.datasource.password=1234 # 使用 druid 数据源 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
查看全部
举报
0/150
提交
取消