文章目录 1. 引入依赖 2. 校验规则 3. 规则使用 4. 自定义异常类 5. 统一返回对象封装 6. 统一异常对象 7. 统一异常枚举 8. 前端form表单输入,自动触发校验
1. 引入依赖
< ! --参数校验--> < dependency> < groupId> org.springframework.boot< /groupId> < artifactId> spring-boot-starter-validation< /artifactId> < /dependency>
2. 校验规则
@NotNull( message = "【每页页码】不能为空" ) private int page; @NotNull( message = "【每页条数】不能为空" ) @Max( value = 100,message = "【每页条数】不能超过100" )
3. 规则使用
public CommonResp list( @Valid EbookQueryReq req) { }
4. 自定义异常类
package com.jiawa.wiki.controller; import com.jiawa.wiki.exception.BusinessException;
import com.jiawa.wiki.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) ; /*** 校验异常统一处理* @param e* @return*/@ExceptionHandler( value = BindException.class) @ResponseBodypublic CommonResp validExceptionHandler( BindException e) { CommonResp commonResp = new CommonResp( ) ; LOG.warn( "参数校验失败:{}" , e.getBindingResult( ) .getAllErrors( ) .get( 0) .getDefaultMessage( )) ; commonResp.setSuccess( false) ; commonResp.setMessage( e.getBindingResult( ) .getAllErrors( ) .get( 0) .getDefaultMessage( )) ; return commonResp; }
5. 统一返回对象封装
package com.jiawa.wiki.resp; public class CommonResp< T> { /*** 业务上的成功或失败*/private boolean success = true ; /*** 返回信息*/private String message; /*** 返回泛型数据,自定义类型*/private T content; public boolean getSuccess( ) { return success; } public void setSuccess( boolean success) { this.success = success; } public String getMessage( ) { return message; } public void setMessage( String message) { this.message = message; } public T getContent( ) { return content; } public void setContent( T content) { this.content = content; } @Overridepublic String toString( ) { final StringBuffer sb = new StringBuffer( "ResponseDto{" ) ; sb.append( "success=" ) .append( success) ; sb.append( ", message='" ) .append( message) .append( '\'' ) ; sb.append( ", content=" ) .append( content) ; sb.append( '}' ) ; return sb.toString( ) ; }
}
6. 统一异常对象
package com.jiawa.wiki.exception; public class BusinessException extends RuntimeException{ private BusinessExceptionCode code; public BusinessException ( BusinessExceptionCode code) { super( code.getDesc( )) ; this.code = code; } public BusinessExceptionCode getCode( ) { return code; } public void setCode( BusinessExceptionCode code) { this.code = code; } /*** 不写入堆栈信息,提高性能*/@Overridepublic Throwable fillInStackTrace( ) { return this; }
}
7. 统一异常枚举
package com.jiawa.wiki.exception; public enum BusinessExceptionCode { USER_LOGIN_NAME_EXIST( "登录名已存在" ) ,LOGIN_USER_ERROR( "用户名不存在或密码错误" ) ,VOTE_REPEAT( "您已点赞过" ) ,; private String desc; BusinessExceptionCode( String desc) { this.desc = desc; } public String getDesc( ) { return desc; } public void setDesc( String desc) { this.desc = desc; }
}
8. 前端form表单输入,自动触发校验