springboot项目整合-注册功能模块开发( 二 )

1.3控制层1.3.1 创建响应1.状态码、状态描述信息、数据 , 这部分功能封装在一个类中,将这类方法作为方法返回值,返回给前端浏览器com.cy.store.StoreApplication
1.3.2. 设计请求依据当前的业务功能模块进行请求的设计
请求的路径: /user/reg请求参数: User user请求类型: Post响应结果:JsonResult<void>1.3.3 处理请求1.创建一个控制层的对应的类UserController com.cy.store.controller.UserController
try {userService.reg(user);voidJsonResult.setState(200);voidJsonResult.setMessage("用户注册成功");} catch (UsernameDuplicatedException e) {voidJsonResult.setState(4000);voidJsonResult.setMessage("用户名被占用");}catch (InsertException e) {voidJsonResult.setState(5000);voidJsonResult.setMessage("注册时发生未知的异常");}业务逻辑过于复杂 进行简化
1.3.4 控制层优化设计在控制层抽离一个父类,在这个父类中统一的处理关于异常的相关操作,编写一个BaseController类,在这个类中,统一的处理异常
package com.cy.store.controller;import com.cy.store.service.ex.InsertException;import com.cy.store.service.ex.ServiceException;import com.cy.store.service.ex.UsernameDuplicatedException;import com.cy.store.util.JsonResult;import org.springframework.web.bind.annotation.ExceptionHandler;/** * @PROJECT_NAME: store * @DESCRIPTION: * @USER: 28416 * @DATE: 2022/11/2 20:34 * * 用来表示控制层类的基类 * */public class BaseController {publicstaticfinalint OK = 200;//表示操作成功的状态码//请求处理方法,这个方法的返回值就是需要传递给前端的数据//当项目中产生异常时,会被拦截到此方法这个方法此时充当的就是请求处理方法 方法的返回值直接给到前端@ExceptionHandler(ServiceException.class) // 主要用于统一处理抛出的异常public JsonResult<Void> handleException(Throwable e){JsonResult<Void>result = new JsonResult<>(e);if (e instanceof UsernameDuplicatedException){result.setState(4000);result.setMessage("用户名已经被占用");}else if (e instanceof InsertException){result.setState(5000);result.setMessage("注册时发生未知的异常");}returnresult;}}修改后的controller - userController 的代码如下;
@RestController@RequestMapping("users")public class UserControllerextendsBaseController{@Autowiredprivate IUserService userService;/*** 原先的代码** @RequestMapping("reg")public JsonResult<Void> reg(User user){//创建结果响应对象JsonResult<Void> voidJsonResult = new JsonResult<>();try {userService.reg(user);voidJsonResult.setState(200);voidJsonResult.setMessage("用户注册成功");} catch (UsernameDuplicatedException e) {voidJsonResult.setState(4000);voidJsonResult.setMessage("用户名被占用");}catch (InsertException e) {voidJsonResult.setState(5000);voidJsonResult.setMessage("注册时发生未知的异常");}returnvoidJsonResult;}**//*** 优化以后的代码* @param user* @return*/@RequestMapping("reg")public JsonResult<Void> reg(User user) {userService.reg(user);return new JsonResult<>(OK);}}妙不可言?。。。。。。。。。?
1.4前端页面的设计1.在register页面中编写发送请求的方法,后端接收方法为reg,当检测中点击事件后触发请求--》 点击事件
选择对应的按键(%(“选择器”)),再去添加点击的事件,$.ajax()函数发送异步请求额2.JQuery封装了一个函数 , 称为$.ajax()函数,通过对象调用ajax函数,可以异步的加载一个请求,依靠的是JAVAScript提供的一个xhr(xmlHttpResponse),封装了这个对象
3.ajax()使用方法: 需要传递一个方法体作为一个方法的参数使用:一对大括号被称为方法体.ajax接收多个参数,参数之间要求使用","进行分割,每一组参数之间使用":"进行分割 。参数的组成部分一个是参数的名称(不能随意更改),参数的值要求是用字符串来标识 。参数的声明顺序没有要求。语法结构如下:
$.ajax({url: "",type: "",dataType: "",success: function() {},error:function() {}});4.ajax函数参数的含义url : 标识请求的地址(url地址) 。不能包括列表部分的内容 例如: url:"localhost:8080/users/reg"type: 请求类型(GET 和 POST 请求类型) 例如: type:"POST"data: 向指定的请求url地址提交的数据: 例如: data:"username="tom"&password="123456""dataType:提交的数据的类型 例如:"json"success:当服务器正常响应客户端时,将会自动调用success方法,并且将服务器返回的数据以参数的形式传递给这个方法的参数上error:当服务器异常响应客户端时,将会自动调用error方法,并且将服务器返回的数据以参数的形式传递给这个方法的参数上
5.js代码可以独立声明在一个js的文件里或者声明在一个script标签中

推荐阅读