validation-api參數校驗


這里針對springboot項目結構

maven添加:  

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>

  

controller(@Validated、@Valid)

@PostMapping("/test.do")
public JSONMessageResponse test(@Validated @RequestBody TestVO testVO) {
   
}

TestVO 

public class TestVO {
    @NotEmpty(message = "名稱不能為空")
    String name;		// 名稱

    @ListNotEmptyNull(message = "不能為空的數組")   // 自定義
    @ListSize(min = 1, max = 5, message = "錯誤的數組大小")
    @Valid
    List<UserVO> list;
}

  

public class UserVO {
    @NotEmpty(message = "名稱不能為空")
    String name;		// 名稱
}

  

錯誤攔截

@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
    
    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        BindingResult bindingResult = ex.getBindingResult();
        String errorMessage = "參數校驗失敗";

        for (FieldError fieldError : bindingResult.getFieldErrors()) {
            errorMessage += ", " + fieldError.getDefaultMessage();
        }
        JSONMessageResponse error = SystemResultUtil.error(5006, errorMessage);
        return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
    }
}

查看返回(返回結構可自定義,這里不詳細指出)

{
  "code": 5006,
  "message": "參數校驗失敗,名稱不能為空", 
"status": 1
}

 

 

對於列表的操作,可以自定義:例如下面的指定list的大小(當然,自帶的@Size可以實現)

/**
 * 指定列表的大小
 *
 * @author sky.javaweb@qq.com
 * @version 1.0
 * @date 2019-01-07
 */
@Target({ANNOTATION_TYPE, METHOD, FIELD})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = ListSizeValidationImpl.class)////此處指定了注解的實現類為ListSizeValidationImpl
public @interface ListSize {
    int min() default 0;

    int max() default Integer.MAX_VALUE;

    String message() default "List集合大小錯誤";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    /**
     * 定義List,為了讓Bean的一個屬性上可以添加多套規則
     */
    @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
    @Retention(RUNTIME)
    @Documented
    @interface List {
        ListSize[] value();
    }

}

 

/**
 * @author sky.javaweb@qq.com
 * @version 1.0
 * @date 2019-01-07
 */
@Service
public class ListSizeValidationImpl implements ConstraintValidator<ListSize, List> {

    private int min;
    private int max;

    @Override
    public void initialize(ListSize constraintAnnotation) {
        this.min = constraintAnnotation.min();
        this.max = constraintAnnotation.max();
    }

    @Override
    public boolean isValid(List list, ConstraintValidatorContext context) {
        if (list != null) {
            if (list.size() < min || list.size() > max) {
                return false;
            }
        }
        return true;
    }
}

 

使用如下:

    @ListSize(min = 2, max = 5, message = "無效的案例圖片")
    List<String> imageList;     // 圖片

  

{
  "code": 5006,
  "message": "參數校驗失敗, 無效的案例圖片",
  "status": 1
}

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM