电商后台管理系统

我要开发同款
居右连2023年08月02日
61阅读
所属分类电商运维

作品详情

异常处理Spring为了整合全局异常的处理(不用在每个方法下捕获或者抛出异常从而达到处理异常的机制),开发了如下注解:@RestControllerAdvice 定义全局异常的处理类 返回值JSON串@ExceptionHandler 标识拦截的异常的类型,如果类型匹配,则执行方法@RestControllerAdvicepublic class MyExceptionAdvice { //写法:1.运行时异常(通用) 2.自定义异常信息 3.拦截所有异常Exception @ExceptionHandler(RuntimeException.class) public Object exception(Exception e){ //需求: 如果遇到异常,应该提示用户201/失败信息. e.printStackTrace(); return SysResult.fail(); }}业务返回满足不同业务需求的返回不同结果,方便前端识别业务执行成功与否,以便执行不同的操作.@Data@Accessors(chain = true)@NoArgsConstructor//无参构造@AllArgsConstructor//全参构造public class SysResult implements Serializable {//实现接口是一种规范性写法 private Integer status;//状态码信息200 201 private String msg;//服务器返回的提示信息 private Object data;//返回的业务数据,不清楚是什么类型,就用object //为了用户使用VO对象更加的方便,重载一些方法,简化程序的调用 public static SysResult fail(){ return new SysResult(201,"业务执行失败",null); } //1.不带参数的正确返回 public static SysResult success(){ return new SysResult(200,"业务执行成功",null); } //2.带返回值的正确返回 用户传递什么/返回值就是什么 public static SysResult success(Object data){ return new SysResult(200,"服务器处理成功",data); } //3.带返回值,带提示信息 public static SysResult success(String msg, Object data){ return new SysResult(200,msg,data); }}用户登录登录安全问题(token)为了防止直接跳转网页,用户登录成功后会返回一个token标识,后续跳转页面时,会监测是否带有token标识,有则可以跳转,没有则不能执行相关业务.若后续关闭系统则需要重新登录并获取token标识.业务实现业务需求文档需求:检测用户登录操作URL: /login请求类型: Post请求接收参数: User对象返回值: Sysresult对象Controller层://检测用户登录操作 @PostMapping("/login") public SysResult login(@RequestBody User user){ System.out.println(user); //token用于用户名和密码的校验,防止直接跳转网页 //token 有值则业务正确 null 业务操作失败 String token = userService.login(user); if (token == null){ return SysResult.fail(); } return SysResult.success(token); }Service层:public String login(User user) { String password = user.getPassword();//明文密码,需要加密,利用DigestUtils //byte[] passByte = password.getBytes(); String md5Pass = DigestUtils.md5DigestAsHex(password.getBytes()); //根据用户名和密文查询数据库 //根据对象中不为null的属性充当where条件 user.setPassword(md5Pass); QueryWrapper qw = new QueryWrapper(user); User userDB = userMapper.selectOne(qw); //查询结果是否有效 if (userDB == null){//用户名密码错误 返回null return null; } //用户名密码均正确 返回一个独一无二的token 利用UUID return UUID.randomUUID().toString() .replace("-", ""); }用户管理用户列表列表分页需求:分页查询用户列表信息URL:/list?query,pagenum,pagesize请求类型:get接收参数:PageResult对象返回值:SysResultController层:/** * 获取用户列表信息 * 参数:PageResult对象进行接收 传递3个参数 * 返回值:SysResult对象 参数(PageResult对象) 返回5个参数 * 我们想要的数据封装在sysResult对象的data属性里,data属性也即PageResult对象, * 前端再根据需要,从data属性里面抽取需要的数据 */ @GetMapping("/list") public SysResult getUserList(PageResult pageResult){ return SysResult.success(userService.getUserList(pageResult)); }Service层:public PageResult getUserList(PageResult pageResult){ //参数1: page分页对象 Page page = new Page(pageResult.getPageNum(),pageResult.getPageSize()); //参数2:分页的查询条件 username模糊查询 注意bug:如果用户没有传递query,模糊查询一样拼接,与理想不符 QueryWrapper qw = new QueryWrapper(); boolean flag = StringUtils.hasLength(pageResult.getQuery()); qw.like(flag,"username",pageResult.getQuery()); //page 原本两个参数 根据分页查询返回 total/分页后的记录records 4个参数 page = userMapper.selectPage(page, qw); List userList = page.getRecords(); long total = page.getTotal(); System.out.println(total); return pageResult.setTotal(total).setRows(userList); }商品管理商品列表列表分页需求:分页查询商品URL:/item/getItemList?query,pagenum,pagesize请求类型:get接收参数:PageResult对象返回值:SysresultController层:@GetMapping("/getItemList") public SysResult getItemList(PageResult pageResult){ pageResult = itemService.getItemList(pageResult); return SysResult.success(pageResult); }Service层:public PageResult getItemList(PageResult pageResult) { Page page = new Page(pageResult.getPageNum(),pageResult.getPageSize()); QueryWrapper qw = new QueryWrapper(); //query有值才拼接 boolean flag = StringUtils.hasLength(pageResult.getQuery()); qw.like(flag, "title", pageResult.getQuery()); page = itemMapper.selectPage(page, qw); return pageResult.setTotal(page.getTotal()).setRows(page.getRecords()); }商品分类查询商品等级分类信息需求:按照商品的level等级,查询出对应等级的商品分类信息URL:/itemCat/findItemCatList/{level}请求类型:get接收参数:level返回值:SysResult对象Controller层:@GetMapping("/findItemCatList/{level}") public SysResult findItemCatList(@PathVariable Integer level){ List itemCatList = itemCatService.findItemCatList(level); return SysResult.success(itemCatList); }Service层:方式1:利用map集合封装所有的父子级关系public List findItemCatList(Integer level) { long start = System.currentTimeMillis(); //map集合封装的是所有父子级关系 Map map = initMap(); //只获取一级,即parend_id=0 if (level == 1) return map.get(0); //获取二级 1/2 if (level == 2) return getLevel2List(map); //获取1/2/3级 else return getLevel3List(map); }/** * 1.封装Map集合 Map
查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论