前言
在构建 RESTful API 的过程中,Spring Boot 提供了一系列强大的功能来简化开发流程。本文将通过一系列关键代码片段,展示如何在 Spring Boot 项目中实现路径参数绑定、结果封装、异常处理及用户登录功能
注解
@PathVariable @PathVariable(“xxx”) 绑定到操作方法的入参中。 一般与@RequestMapping(method = RequestMethod.GET)一起使用 @RequestMapping("/getUserById/{name}") public User getUser(@PathVariable("name") String userName){ return userService.selectUser(userName); }
方法名
QueryWrapper 条件构造器QUERYWRAPPER方法详解
@ControllerAdvice 统一异常处理
@Componen
instanceof
写一个封装类
格式化代码
ctrl shift alt + l
创建一个包 common
创建一个接口 constants 里面有 code 表示 成功 与否
package com.example.springboot.common; public interface Constants { String CODE_200= "200"; // success String CODE_400 = "400"; // 参数错误 String CODE_401 = "401"; // 权限不足 String CODE_500 = "500"; // 系统错误 String CODE_600 = "600"; // 用户名或密码错误 }
写一个封装类 Result
package com.example.springboot.common; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /* * 接口同一返回 包装类 * */ @Data @AllArgsConstructor @NoArgsConstructor public class Result { // 包装数据 返回 前端 private String code; // 信息 private String msg; // 通用 可以存放 任何类型 private Object data; // 成功的 方法 // 无数据 public static Result success() { return new Result( Constants.CODE_200, "", null ); } // 有数据 public static Result success(Object data) { return new Result( Constants.CODE_200, "登录成功", data ); } public static Result error() { return new Result( Constants.CODE_500, "系统错误", null ); } // error public static Result error(String code, String msg) { return new Result( code, msg, null ); } }
写一个异常类
package com.example.springboot.exception; import lombok.Getter; /* * 自定义异常 * * */ @Getter public class ServiceException extends RuntimeException{ private String code; // msg 这个 类 本身就有,,所以不需要 添加 public ServiceException(String code,String msg){ super(msg); this.code=code; } }
globalexpection
package com.example.springboot.exception; import com.example.springboot.common.Result; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; // 异常 处理 器 @ControllerAdvice public class GlobalException { @ExceptionHandler(ServiceException.class) @ResponseBody public Result handle(ServiceException se){ return Result.error(se.getCode(),se.getMessage()); } }
一个登录的实现类
package com.example.springboot.server; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.springboot.common.Constants; import com.example.springboot.exception.ServiceException; import com.example.springboot.pojo.UserDto; import com.example.springboot.mapper.UserMapper; import com.example.springboot.pojo.User; import org.apache.ibatis.logging.Log; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class UserService extends ServiceImpl<UserMapper,User> implements IUserService{ @Transactional public boolean saveUser(User user) { return saveOrUpdate(user); } @Override public UserDto login(UserDto userDTO) { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("username", userDTO.getUsername()); queryWrapper.eq("password", userDTO.getPassword()); User one; try{ one = getOne(queryWrapper); //从数据库查询 } catch (Exception e){ // 小, throw new ServiceException(Constants.CODE_500,"系统错误"); } // 将 有的属性 复制到没有的属性 中去 BeanUtil.copyProperties(one, userDTO, true); return userDTO; } }
使用
// 登录方法 @PostMapping("/login") public Result login(@RequestBody UserDto userDTO){ String username = userDTO.getUsername(); String password = userDTO.getPassword(); if(StrUtil.isBlank(username) || StrUtil.isBlank(password)){ return Result.error(Constants.CODE_400,"参数错误"); } UserDto dto = userService.login(userDTO); return Result.success(dto); }