导入GAV 因为这个框架springboot 自带有 所以呢 不用版本:
然后我们直接在请求类上写校检注解 【注: 这里的EbookQueryReq 是请求类 继承了 PageReq 类】
因为我们查询的接口是暴露的 ,如果别人拿到了 ,查1000000000+条数据 我们服务器岂不是崩了 几千回 都不够嘛 ,所以这里针对这个解决进行校检:
因为查询是分包查询 所以这里直接设置:
可以看到 直接用注解。这只是设置了校检规则 ,让请求参数 page 和 size 有规定。
启用校检
启用的话要在控制器参数哪里写注解开启:
2021年10月26日 10:25:10: 补充: 如果你效果 那么框框那个换成 @Validated 即可! 记住!
我们测试一下:
可以看到了报错,信息也是给出来了 因为最多就查询20 你既然查2000 那我没的说哈
既然现在知道怎么开启校检 和 设置校检规则 那么我们现在开始解决这个问题 并返回给前端 让他报个错,美滋滋:
是这个异常嘛 所以我们自定义异常咧:
package com.bihu.study.Controller; import com.bihu.study.Resp.CommonResp; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.validation.BindException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice public class ControllerExceptionHandler { private static final Logger LOG = LoggerFactory.getLogger(ControllerExceptionHandler.class); /** * 校验异常统一处理 */ @ExceptionHandler(value = BindException.class) @ResponseBody public CommonResp validExceptionHandler(BindException e) { CommonResp commonResp = new CommonResp(); //新建一个请求类 //打印LOG LOG.warn("参数校验失败:{}", e.getBindingResult().getAllErrors().get(0).getDefaultMessage()); //设置请求失败 commonResp.setSuccess(false); //把我们失败的默认信息返回给前端 commonResp.setMessage(e.getBindingResult().getAllErrors().get(0).getDefaultMessage()); return commonResp; } }
简简单单!
前端收到false 那么就显示message 即可,自己发挥.
其实不止这个 还有很多接口你要去校检 比如 添加,你得要是不为空吧 什么什么的
2021年10月26日 10:59:48 补充:
有一次我做了校检他不报异常
一看是
MethodArgumentNotValidException
所以这次直接针对他处理 ,办法一样:
红框框就是获取他的错误默认信息(自己设置的)。