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;
}