1. 程式人生 > >SpringBoot引數校驗--List型別

SpringBoot引數校驗--List型別

一般我們定義了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層使用該工具類,即可進行引數的校驗。