【参数校验参考】参数校验

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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章