SpringBoot引數校驗--List型別
阿新 • • 發佈:2018-11-16
一般我們定義了DTO來接收引數,然後使用@validated來驗證DTO裡面的校驗規則。當我們的介面接收的引數為List<E>時,可以使用本文的方法進行校驗。
包含驗證規則的實體類:
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; @Data public class SingleDTO { @ApiModelProperty(value = "主鍵ID", required = true) @NotBlank(message = "缺少引數:主鍵ID") @Pattern(regexp = "[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}",message = "主鍵ID格式有誤:UUID格式") private String pkId; }
引數校驗:
import com.wingconn.aeocustoms.domain.dto.SingleDTO; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.validation.*; import java.util.ArrayList; import java.util.List; import java.util.Set; public class ValidatorUtilsTest { private static final Logger LOGGER = LoggerFactory.getLogger(ValidatorUtilsTest.class); private static Validator createValidator() { Configuration<?> config = Validation.byDefaultProvider().configure(); ValidatorFactory factory = config.buildValidatorFactory(); Validator validator = factory.getValidator(); factory.close(); return validator; } /** * Controller層驗證List型別的引數 */ @Test public void validate() { List<SingleDTO> dtos = new ArrayList<>(); SingleDTO singleDTO = new SingleDTO(); singleDTO.setPkId("12345678990"); dtos.add(singleDTO); Validator validator = createValidator(); for(SingleDTO dto : dtos) { Set<ConstraintViolation<SingleDTO>> violations = validator.validate(dto); if (violations.size() == 0) { LOGGER.debug("No violations."); System.out.println("success"); }else { LOGGER.error("%s violations:%n", violations.size()); for(ConstraintViolation<SingleDTO> violation :violations){ LOGGER.error("引數:"+violation.getPropertyPath() + " " + violation.getMessage()); } } } } }
用引數“1234567890”進行單元測試,結果為:
用引數“c076de6c-aeb3-4882-ba6c-a886942c53c4”進行校驗,結果為:
單元測試表明該工具類可以使用。實際使用時,直接在Controller層使用該工具類,即可進行引數的校驗。