java SpringBoot中自定义参数校验
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java SpringBoot中自定义参数校验相关的知识,希望对你有一定的参考价值。
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Author: vincent
* Date: 2019-01-12 12:35:00
* Comment: 自定义验证注解,用于验证订单ID的合法性
*/
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UserOrderConstraintValidator.class)
@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
public @interface UserOrderValidation {
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import com.vincent.security.session.model.UserOrderService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import javax.annotation.Resource;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* Author: vincent
* Date: 2019-01-12 12:37:00
* Comment: 想让自定义验证注解生效,需要实现 ConstraintValidator 接口。
* 接口的第一个参数是自定义注解,第二个参数是返回值类型。这里因为订单ID是String类型,我们第二个参数定义为 String
* ConstraintValidator 接口的实现类无需添加 @Component 注解就可以将我们写的 Service Mapper 等注入进来。
*/
@Slf4j
public class UserOrderConstraintValidator implements ConstraintValidator<UserOrderValidation, String> {
@Resource
private UserOrderService userOrderService;
/**
* 初始化方法,我们可以做一些初始化的工作
* @param constraintAnnotation
*/
@Override
public void initialize(UserOrderValidation constraintAnnotation) {
log.info("initialize constraint");
}
/**
* 判断 value 是否为空,不为空的情况下去数据库查询订单ID是否邮箱
* @param value 被注解的字段的值,也就是 userOrderId
* @param context
* @return
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return StringUtils.isNotEmpty(userOrderId) && userOrderService.exists(userOrderId);
}
}
import com.vincent.security.session.validator.UserOrderValidation;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Author: vincent
* Date: 2019-01-12 23:55:00
* Comment:
*/
@RestController
@RequestMapping("/user/orders")
public class UserOrderController {
/**
* 查看订单详情
* @param userOrderId 订单ID
* @return
*/
@GetMapping("/{id}")
public ResponseEntity<?> show(@PathVariable("id") @UserOrderValidation String userOrderId) {
return ResponseEntity.ok().build();
}
}
以上是关于java SpringBoot中自定义参数校验的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot中自定义properties文件配置参数并带有输入提示
springBoot参数联合校验,自定义分组校验
Springboot通过切面校验参数完整性
SpringBoot中集成参数校验
SpringBoot中集成参数校验
spring boot中自定义验证的参数化junit测试