javascript
java spring 校验框架_Springboot 使用校验框架validation校验
b/s系統中對http請求數據的校驗多數在客戶端進行,這也是出于簡單及用戶體驗性上考慮,但是在一些安全性要求高的系統中服務端校驗是不可缺少的。
Spring3支持JSR-303驗證框架,JSR-303 是Java EE 6 中的一項子規范,叫做BeanValidation,官方參考實現是hibernate Validator(與Hibernate ORM 沒有關系),JSR 303 用于對Java Bean 中的字段的值進行驗證。
validation與 springboot 結合
依賴
javax.validation
validation-api
2.0.1.Final
org.hibernate
hibernate-validator
6.0.16.Final
1. bean 中添加標簽
部分代碼:
標簽需要加在屬性上,@NotBlank 標簽含義文章末尾有解釋
public?class?User{
private?Integer?id;
@NotBlank(message?=?"{user.name.notBlank}")
private?String?name;
private?String?username;
2. Controller中開啟驗證
在Controller 中 請求參數上添加@Validated 標簽開啟驗證
@RequestMapping(method?=?RequestMethod.POST)
public?User?create(@RequestBody?@Validated?User?user){
return?userService.create(user);
}
@RequestMapping(method?=?RequestMethod.GET)
public?User??getUserById(@NotNull(message?=?"id不能為空")??int?userId){
return?userService.getUserById(userId);
}
3. resource 下新建錯誤信息配置文件
當然 message 信息也可以配置在標簽后面例如
public?class?User{
private?Integer?id;
@NotBlank(message?=?"名字不能為空")
private?String?name;
private?String?username;
也可以在resource 目錄下新建提示信息配置文件“ValidationMessages.properties“ 這樣可以全局統一管理錯誤消息
注意:名字必須為“ValidationMessages.properties“ 因為SpringBoot自動讀取classpath中的ValidationMessages.properties里的錯誤信息
ValidationMessages.properties 文件的編碼為ASCII。數據類型為 key value 。
key“user.name.notBlank“為第一步 bean的標簽 大括號里面對應message的值
value 為提示信息 ,但是是ASCII 。(內容為“名字不能為空“)
4. 自定義異常處理器,捕獲錯誤信息
當驗證不通過時會拋異常出來,異常的message 就是 ValidationMessages.properties 中配置的提示信息。
此處定義異常處理器。捕獲異常信息(因為驗證不通過的項可能是多個所以統一捕獲處理),并拋給前端。(此處是前后端分離開發)
@ExceptionHandler(MethodArgumentNotValidException.class)
public?void?MethodArgumentNotValidException(Exception?ex,?HttpServletRequest?request,?HttpServletResponse?response){
logger.error(?":"?+?CommonUtil.getHttpClientInfo(request),?ex);
MethodArgumentNotValidException?c?=?(MethodArgumentNotValidException)?ex;
List?errors?=c.getBindingResult().getAllErrors();
StringBuffer?errorMsg=new?StringBuffer();
errors.stream().forEach(x?->?errorMsg.append(x.getDefaultMessage()).append(";"));
pouplateExceptionResponse(response,?HttpStatus.INTERNAL_SERVER_ERROR,?errorMsg.toString());
}
private?void?pouplateExceptionResponse(HttpServletResponse?response,?HttpStatus?errorCode,?String?errorMessage){
try?{
response.sendError(errorCode.value(),?errorMessage);
}?catch?(IOException?e)?{
logger.error("failed?to?populate?response?error",?e);
}
}
5. 附上部分標簽含義
示例
@Pattern(regexp="^[a-zA-Z0-9]+$",message="{account.username.space}")
@Size(min=3,max=20,message="{account.username.size}")
如果上述的參數校驗不滿足要求可以 考慮自定義注解
自定義注解校驗
步驟:
1、定義注解, 2、實現校驗邏輯
用法
public?class?MySaveArgs{
@NotEmpty
@MustBeMyCode
private?String?code;
定義注解
@Constraint(
validatedBy?=?{MyCodeConstraintValidator.class}
)
@Target({ElementType.FIELD,?ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public?@interface?MustBeMyCode?{
String?message()?default?"編碼校驗不通過";
Class>[]?groups()?default?{};
Class?extends?Payload>[]?payload()?default?{};
}
實現ConstraintValidator 接口,編寫自己的校驗邏輯,
public?class?MyCodeConstraintValidator?implements?ConstraintValidator{
@Override
public?boolean?isValid(String?value,?ConstraintValidatorContext?context){
//此處編寫自己的校驗邏輯,并返回
return?value?!=?null;
}
}
注意:ConstraintValidator 此處應填寫你自己的校驗注解名 和 需校驗參數類型
總結
以上是生活随笔為你收集整理的java spring 校验框架_Springboot 使用校验框架validation校验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IllegalStateExceptio
- 下一篇: mysql5.6.37 主从同步_MyS