使用javax.validation.constraints對請求體進(jìn)行統(tǒng)一校驗
一、序言
在處理請求的時候,通常需要對參數(shù)進(jìn)行校驗是否為空,參數(shù)的長度等進(jìn)行校驗,
如果在controller層一個一個的寫校驗就很麻煩,于是就有了javax.validation.constraints包。
二、注解類型

不同的注解用于不同的數(shù)據(jù)類型,小伙伴們可以下載源碼看一些常用的比如非空限制的注解的區(qū)別,
我這里截幾個圖:



所以我一般的處理是,如果是字符串類型就用@NotBlank,
如果是集合數(shù)組之類就用@NotEmpty,如果是對象就用@NotNull
當(dāng)然還有別的包的校驗類型,比如限制請求參數(shù)的長度就可以用到另外一個包里的注解了,在pom中增加依賴:
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.17.Final</version> <scope>compile</scope> </dependency>

三、使用注解
3.1 請求實體類增加注解
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @author FanHuiFang
* @version 1.0
* @date 2024年04月27日 19:58
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserSaveReq {
@NotBlank(message = "name不能為空")
private String name;
@NotNull(message = "年齡不能為空")
private Long age;
@NotEmpty(message = "朋友列表不能為空")
private List<String> friends;
@NotNull(message = "客戶手機(jī)號不能為空")
@Length(min = 8, max = 16, message = "客戶手機(jī)號不合法")
private String userPhone;
}
3.2 控制層
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import org.springframework.validation.Errors;
@PostMapping(value = "/saveUser")
public ResultBean<String> saveUser(@Valid @RequestBody UserSaveReq req, Errors errors) {
if (Objects.isNull(req)) return ResultBean.fail("缺少必要的請求參數(shù)");
if (errors.hasErrors() && Objects.nonNull(errors.getFieldError())) {
String errorMessage = errors.getFieldError().getDefaultMessage();
log.error("保存用戶信息時請求參數(shù)錯誤:{}", errorMessage);
return ResultBean.fail(errorMessage);
}
//保存處理......
}
當(dāng)進(jìn)行請求的時候,如果缺少某個參數(shù),或者比如長度不對,就會返回異常信息,這樣就不用一個個的進(jìn)行校驗了。
注意:這里請求參數(shù)中需要加上@Valid注解,如果不加,應(yīng)該是校驗沒有生效的
比如手機(jī)號號長度不對,就會返回
{
"code": 0,
"message": "客戶手機(jī)號不合法",
"data": null
}
這里也附帶一下我用的ResultBean,以免看的云里霧里的:
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
/**
* @author FanHuiFang
* @version 1.0
* @date 2024年04月27日 21:50
*/
@Builder
@Data
@AllArgsConstructor
@ToString
public class ResultBean<T> implements Serializable {
private Integer code;
private String message;
private T data;
public ResultBean(int code, String message, T data) {
this.code = code;
this.data = data;
this.message = message;
}
public ResultBean(Integer code, String message) {
this.code = code;
this.message = message;
}
public static <T> ResultBean<T> data(T data) {
return data("操作成功", data);
}
public static <T> ResultBean<T> data(String message, T data) {
return data(1, message, data);
}
public static <T> ResultBean<T> data(int code, String message, T data) {
return new ResultBean<>(code, message, data);
}
public static <T> ResultBean<T> fail(String message, T data) {
return new ResultBean<>(0, message, data);
}
public static <T> ResultBean<T> fail(Integer code, String message) {
return new ResultBean<>(code, message);
}
public static <T> ResultBean<T> fail(String message) {
return new ResultBean<>(0, message, null);
}
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Springboot項目javax.validation使用方法詳解
- java validation 后臺參數(shù)驗證的使用詳解
- java使用Validation進(jìn)行數(shù)據(jù)校驗的方式總結(jié)
- JAVA中通過Hibernate-Validation進(jìn)行參數(shù)驗證
- JAVA中的字段校驗(validation)
- Java參數(shù)校驗中validation和validator的區(qū)別詳解
- Java Validation Api實現(xiàn)原理解析
- Java Validation Api如何實現(xiàn)自定義注解
- Javax Validation自定義注解進(jìn)行身份證號校驗
- Java使用validation攔截非法提交的數(shù)據(jù)的方法實現(xiàn)
相關(guān)文章
java編程創(chuàng)建型設(shè)計模式工廠方法模式示例詳解
這篇文章主要為大家介紹了java編程創(chuàng)建型設(shè)計模式之工廠方法模式的創(chuàng)建及案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02
JavaWeb使用Session和Cookie實現(xiàn)登錄認(rèn)證
本篇文章主要介紹了JavaWeb使用Session和Cookie實現(xiàn)登錄認(rèn)證,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03

