一个SpringBoot项目的项目结构

本文探讨了后端开发中关键要素,包括参数校验的Spring Boot验证技术,使用Result对象统一返回结构,以及ControllerAdvice实现异常捕获。还推荐了Easy-Code插件作为代码生成工具。
摘要由CSDN通过智能技术生成

一个后端项目我们应该考虑如下问题:

  • ①:参数的接受及校验;
  • ②:统一返回体;
  • ③:统一异常处理;
  • ④:代码生成器

1、参数的接受及校验

我们可以通过自定义接受对象和返回对象来接受这个问题,再通过@RequestBody@RequestParam@PathVariable注解来进行参数获取。

参数校验:
我们可以通过validation来解决这个问题,我们主要做三步:

  • 引入组件:
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
  • 给需要校验的字段上加注解
public class UserUpdateVM {

    @NotBlank
    private String realName;

    private String age;

    private Integer sex;

    private String birthDay;

    private String phone;

    @NotNull
    private Integer userLevel;
}

下面是常用的注解:

注解校验功能
@AssertFalse必须是false
@AssertTrue必须是true
@DecimalMax小于等于给定的值
@DecimalMin大于等于给定的值
@Digits可设定最大整数位数和最大小数位数
@Email校验是否符合Email格式
@Future必须是将来的时间
@FutureOrPresent当前或将来时间
@Max最大值
@Min最小值
@Negative负数(不包括0)
@NegativeOrZero负数或0
@NotBlank不为null并且包含至少一个非空白字符
@NotEmpty不为null并且不为空
@NotNull不为null
@Null为null
@Past必须是过去的时间
@PastOrPresent必须是过去的时间,包含现在
@PositiveOrZero正数或0
@Size校验容器的元素个数
  • Controller中方法添加@valid注解
@PostMapping("register")
public Result register(@RequestBody @Valid UserRegisterVM vm){
	...
}

2、统一返回体

常见的返回体如下:

public class Result<T> {
    private int code;
    private String message;
    private T response;
    ...
}

再搭配上系统状态类

public enum  SystemCode {
    /**
     * 成功
     */
    OK(1, "成功"),
    AccessTokenError(400, "用户登录令牌失效"),
    UNAUTHORIZED(401, "用户未登录"),
    AuthError(402, "用户名或密码错误"),
    InnerError(500, "系统内部错误"),
    ParameterValidError(501, "参数验证错误"),
    AccessDenied(502,"用户没有权限访问");

    int code;
    String message;
    
    ...
}

我们再往Result类上添加一些静态方法,就很ok

public class Result<T> {
    ...
    public static Result ok(){
        SystemCode ok = SystemCode.OK;
        return new Result(ok.getCode(),ok.getMessage());
    }

    public static<F> Result<F> ok(F data){
        SystemCode ok = SystemCode.OK;
        return new Result<>(ok.getCode(),ok.getMessage(),data);
    }

    public static Result fail(Integer code,String message){
        return new Result(code,message);
    }
}

三、统一异常捕获

使用ControllerAdvice+@ExceptionHandler就可以解决,增强controller,对其抛出的Exception进行捕获。MethodArgumentNotValidException是validation校验失败后抛出的异常,BindException是前后端数据绑定失败抛出的异常,比如日期格式不正确。

@ControllerAdvice
public class ExceptionHandle {
   
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public Result handler(MethodArgumentNotValidException e) {
		...
    }

    @ExceptionHandler(BindException.class)
    @ResponseBody
    public Result handler(BindException e) {
		...
    }
}

四、代码生成器

使用intelllij IDEA编辑器推荐使用Easy-Code插件,好用,点赞!
EasyCode使用传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值