【參數校驗參考】參數校驗

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