1,导相关依赖
2,常用的Validation注解
@NotNull
: 标记字段不能为 null
@NotEmpty
: 标记集合字段不为空(至少要有一个元素)
@NotBlank
: 标记字段串字段不能是空字符串(即它必须至少有一个字符)
@Min
/ @Max
: 标记数字类型字段必须大于/小于指定的值
@Pattern
: 标记字符串字段必须匹配指定的正则表达式
@Email
: 标记字符串字段必须是有效的电子邮件地址
还有很多,暂不列举。
3,在实体类中配置,例如:
package com.itcast.ucenter.entity
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; /** * <p> * 用户信息表 * </p> * * @author StarRiver * @since 2022-11-15 */ @Data public class User{
//标记接口,新增组 public interface Add{
}
private static final long serialVersionUID = 1L; private Long userId; private String nickName; @NotNull(message = "手机号不能为空") @Pattern(regexp = "^[0-9]+$", message = "手机号码只能为数字") @Pattern(regexp = "^1[34578]\\d{9}$" , message = "手机号码格式有误") private String phonenumber; @NotNull(groups={Add.class},message = "密码不能为空")
private String password; }
4,在方法上校验,例如:
@PostMapping("register") public R registerUser(@Valid RegisterVo registerVo) { userService.register(registerVo); return R.ok(); }
@Valid注解的作用:是启动自动验证@Validated注解的作用,自动按组进行校验,1比如:
@PostMapping("register") public R registerUser(@Validated({Add.class}) RegisterVo registerVo) { userService.register(registerVo); return R.ok(); }
2,如果使用了这种
@PostMapping("login") public R loginUser(@NotNull(message = "手机号不能为空") @Pattern(regexp = "^[0-9]+$", message = "手机号码只能为数字") @Pattern(regexp = "^1[34578]\\d{9}$" , message = "手机号码格式有误") @RequestParam String phonenumber, @NotNull(message = "密码不能为空") @RequestParam String password) { //调用service方法实现登录 //返回token值,使用jwt生成 String token = userService.login(phonenumber,password); return R.ok().data("token", token); }
那么要在类上面加上 @Validated注解,才可以使得参数的校验生效
5,统一异常返回类
package com.itcast.servicebase.exceptionhandler; import com.itcast.commonutil.R; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindException; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @ControllerAdvice @ResponseBody public class GlobalExceptionHandler { /** * @param e * @return * @Validated写在方法上会报这个异常数据校验异常返回 */ @ExceptionHandler(value = BindException.class) public R BindEx(BindException e) { List<FieldError> fieldErrors = e.getFieldErrors(); StringBuilder sb = new StringBuilder(); for (FieldError fe : fieldErrors) { sb.append("属性:") .append(fe.getField()) .append("校验不通过,原因:") .append(fe.getDefaultMessage()) .append(";"); } return R.error().data("message", sb.toString()); } //@Validated写在类上会报这个异常数据校验异常返回 @ExceptionHandler(value = ConstraintViolationException.class) public R BindHandlerEx(ConstraintViolationException e) { Set<ConstraintViolation<?>> set = e.getConstraintViolations(); List<String> list = set.stream().map(v -> "属性:" + v.getPropertyPath() + ",属性的值:" + v.getInvalidValue() + ",校验不通过的提示信息:" + v.getMessage() + ",消息模板:" + v.getMessageTemplate()) .collect(Collectors.toList()); return R.error().data("list", list); } //自定义异常 @ExceptionHandler(ShopException.class) public R error(ShopException e) { e.printStackTrace(); return R.error().code(e.getCode()).message(e.getMsg()); } }
6,待学习。
标签:return,校验,class,Bean,import,message,Validation,public From: https://www.cnblogs.com/Galaxy1/p/16903182.html