http请求时,对参数进行校验,以post请求为例,直接上代码:
先来一个自定义注解:
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
/**
* 自定义validation注册校验所传入内容必须在list中
*/
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {InListValidator.class})
public @interface InList {
String[] value() default {};
String message() default "{params not found in InList value}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
自定义注解实现:
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.List;
/**
* InList校验逻辑
*/
class InListValidator implements ConstraintValidator<InList, String> {
private List<String> valueList;
@Override
public void initialize(InList constraintAnnotation) {
valueList = Arrays.asList(constraintAnnotation.value());
}
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
return valueList.contains(value);
}
}
参数Vo类:
import com.universe.server.common.validation.InList;
import lombok.Data;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 采购原始请求数据VO
*
* @author huaronghao
* created 2020/6/4 16:14
*/
@Data
public class PurchaseOriginOrderReqVO {
@NotEmpty(message = "采购平台对账单号不能为空")
private String bizOrderNo;
@DecimalMin(value = "0", message = "账单金额不能小于0")
private BigDecimal billsAmount;
@DecimalMin(value = "0", message = "扣减金额不能小于0")
private BigDecimal offsetAmount;
/**
* 应付金额
*/
@NotNull(message = "实付金额不能为空")
private BigDecimal payAmount;
/**
* 币种
*/
@NotEmpty(message = "币种编码不能为空")
private String currencyCode;
@InList(value = {"JIT", "ASSEMBLE"}, message = "采购模式必须为JIT或者ASSEMBLE")
private String purchaseMode;
/**
* 费用类型
* 1:货到付款 11:货款-首款 12:货款-尾款 13:货款-预付款
*/
@InList(value = {"1", "11", "12", "13"}, message = "费用类型必须为1、11、12、13")
private String fundType;
}
代码调用示例,使用**@Valid注解**:
@PostMapping("/receive")
public BaseDataVO receiveOriginOrder(@Valid @RequestBody PurchaseOriginOrderReqVO reqVO) {
BaseDataVO baseDataVO;
return baseDataVO;
}