効果
この依存関係は、Spring Boot アプリケーションで検証機能を有効にするために使用されるスターター依存関係です。
効果は次のとおりです。
-
検証を有効にする: この依存関係により、Spring Boot で検証が提供されます。これには、アプリケーションで認証操作を実行するために認証に必要なクラスと構成が含まれています。
-
JSR 303 検証仕様のサポート: この依存関係は、Java によって標準化された JSR 303 検証仕様に基づいており、Bean Validation (Bean Validation) 機能のサポートを提供します。アノテーション (たとえば
@NotNull
、@Size
、@Pattern
など) を使用して Java Bean のプロパティを検証し、データの有効性を確認できます。 -
統合されたバリデーター: この依存関係は、検証操作を実行し、検証の失敗を検出するために、Hibernate Validator などの一般的に使用されるバリデーター (Validator) も統合します。
この依存関係を追加すると、Spring Boot アプリケーションで検証関数を簡単に使用したり、リクエスト パラメーターの検証やフォームの検証などのシナリオでデータ検証にアノテーションを使用したりできるようになります。
使い方
1. Maven を介してインポート依存関係を導入する
<!-- 参数校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. アノテーションによりパラメータに検証条件を追加する
package com.wwk.usercenter.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
*
* @TableName user
*/
@TableName(value ="user")
@Data
public class User implements Serializable {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 昵称
*/
private String nickname;
/**
* 用户名
*/
@NotBlank(message = "用户名不能为空")
@Length(min = 4,message = "用户名至少4位")
private String username;
/**
* 密码
*/
@NotBlank(message = "密码不能为空")
@Length(min = 8,message = "密码至少8位")
private String userPassword;
/**
* 确认密码(非数据库字段)
*/
@TableField(exist = false)
@NotBlank(message = "确认密码不能为空")
@Length(min = 8,message = "确认密码至少8位")
private String checkPassword;
/**
* 头像
*/
private String avatarUrl;
/**
* 性别 0未知 1男 2女
*/
private Integer gender;
/**
* 电话
*/
private String phone;
/**
* 邮箱
*/
@Email(message = "邮箱格式不正确")
private String email;
/**
* 状态 0:正常 1:异常
*/
private Integer userStatus;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 是否删除
*/
private Integer isDelete;
すべての検証に関するメモと説明
シリアルナンバー | 注釈 | 説明 |
---|---|---|
1 | @NotNull |
検証オブジェクトを null にすることはできません。 |
2 | @NotBlank |
検証文字列には、null、空の文字列、またはスペースのみを含めることはできません。 |
3 | @NotEmpty |
文字列、コレクション、または配列が null であってはならず、要素が必要であることを検証します。 |
4 | @Size |
文字列、コレクション、または配列のサイズが指定された範囲内にある必要があることを検証します。 |
5 | @Min |
検証番号は、指定された最小値以上である必要があります。 |
6 | @Max |
検証番号は、指定された最大値以下である必要があります。 |
7 | @DecimalMin |
検証番号は指定された最小値以上である必要があり、小数がサポートされます。 |
8 | @DecimalMax |
検証番号は指定された最大値以下である必要があり、小数がサポートされます。 |
9 | @Pattern |
検証文字列は、指定された正規表現と一致する必要があります。 |
10 | @Email |
検証文字列は有効な電子メール アドレスである必要があります。 |
11 | @Length |
検証文字列の長さは指定された範囲内である必要があります。 |
12 | @Range |
認証番号は指定された範囲内である必要があります。 |
13 | @Digits |
検証番号は、指定された桁数の整数または 10 進数である必要があります。 |
14 | @Positive |
検証番号は正の値である必要があります。 |
15 | @Negative |
検証番号は負の値である必要があります。 |
16 | @Past |
検証日は現在時刻より前である必要があります。 |
17 | @Future |
検証日は現在時刻以降である必要があります。 |
3. コントローラーが受信したパラメーターを通じて検証します。
import com.wwk.usercenter.model.entity.User;
import com.wwk.usercenter.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
@RequestMapping("/register")
public R register(@RequestBody @Validated User user, BindingResult bindingResult) {
Map<String, Object> map = new HashMap<>();
// 检查绑定结果中是否存在字段错误
if (bindingResult.getFieldErrors().size() > 0) {
// 遍历每个字段错误,并将字段名和错误消息存储在map中
bindingResult.getFieldErrors().forEach(fieldError -> {
String field = fieldError.getField();
String message = fieldError.getDefaultMessage();
map.put(field, message);
});
// 记录错误消息
map.forEach((field, message) -> {
log.error("错误信息---->{}:{}", field, message);
});
// 收集错误消息并返回带有错误状态和消息的响应
List<Object> errMessages = map.keySet().stream().map(key -> map.get(key)).collect(Collectors.toList());
return R.error(444, "用户信息校验异常", errMessages);
}
// 没有字段错误,继续注册流程...
System.out.println(user);
return R.success("用户注册成功");
}
};
4. 使用する必要があるツールクラスと列挙型クラス
1.Rツールクラス
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class R<T> implements Serializable {
private Integer code;
private String msg;
private Object data;
public static R success(Object data){
return new R(1,"OK", data);
}
public static R success(Status status,Object data){
return new R(status.getCode(), status.getMessage(), data);
}
public static R success(){
return new R(1,"OK",null);
}
//失败各有不同
public static R error(Status status) {
return new R(status.getCode(), status.getMessage(), null);
}
public static R error(String msg) {
return new R(0,msg,null);
}
public static R error(Status status, Object obj) {
return new R(status.getCode(), status.getMessage(), obj);
}
public static R error(Integer code, String msg, Object obj) {
return new R(code,msg,obj);
}
}
2. 対応するステータス コード列挙クラス Status
public enum Status {
LOGIN_SUCCESS(1,"登录成功"),
SUCCESS(1,"成功"),
ERROR(0,"失败"),
NOT_FIND_PATH(0,"没有找到路径"),
STATUS_ERROR(0,"请先把状态改为停售再操作"),
NOT_EXIST(0,"用户不存在"),
PASS_ERROR(0,"密码错误"),
ADMIN_DISABLE(0,"用户已禁用"),
NOT_FIND_DATA(0,"没有找到该用户对应的数据")
;
private Integer code;
private String message;
Status(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}