spring-boot-starter-validation进行参数校验!
成都创新互联是一家专注于成都网站设计、成都网站制作与策划设计,浑源网站建设哪家好?成都创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:浑源等地区。浑源做网站价格咨询:13518219792
org.springframework.boot
spring-boot-starter-validation
@NotNull
@NotBlank
@NotEmpty
@Size
/**
* 时间属性格式校验
* @author:liyajie
* @createTime:2022/1/20 10:38
* @version:1.0
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER,ElementType.FIELD})
@Constraint(validatedBy = DateValidator.Validator.class)
public @interface DateValidator {
// 校验未通过时的返回信息
String message() default "日期格式不正确";
// 以下两行为固定模板
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
/**
* 预期日期格式
*/
String expectValue();
@Slf4j
class Validator implements ConstraintValidator{
private String expectValue;
@Override
public void initialize(DateValidator dateValidator) {
expectValue = dateValidator.expectValue();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
boolean flag = false;
/**
* 为空直接通过,只做格式验证
*/
if(Strings.isNullOrEmpty(value)){
return true;
}
try {
Date date = DateUtil.formatStr2Date(value, expectValue);
flag = true;
}catch (RuntimeException e){
log.warn("DateValidator 日期格式不正确");
e.printStackTrace();
}
return flag;
}
}
}
校验不通过时,会直接抛出异常,程序将停止执行下面的逻辑,这样是不合理的,所以我们要捕获异常,并进行处理,方案如下: 全局捕获异常,并统一返回:
/**
* 全局异常处理
* @author: zhanglei
* @version: 1.0
* @date: 2021/5/18 20:27
*/
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
/**
* 校验异常
* @author: liyajie
* @date: 2022/1/20 13:07
* @param e
* @return com.lyj.validates.common.R
* @exception:
* @update:
* @updatePerson:
**/
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public R exceptionHandler(MethodArgumentNotValidException e) {
log.error("exceptionHandler info:", e);
BindingResult bindingResult = e.getBindingResult();
StringBuilder builder = new StringBuilder();
for (FieldError fieldError : bindingResult.getFieldErrors()) {
builder.append(fieldError.getDefaultMessage()).append("!");
}
log.error("message : {}",builder.toString());
return new R("500",builder.toString());
}
}
分享题目:入参校验,你还在写If-Else?Out了!快来看看这个吧
文章链接:http://www.36103.cn/qtweb/news44/34744.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联