validation-api參數校驗

這裏針對springboot項目結構java

maven添加:  web

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

  

controller(@Validated、@Valid)spring

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

TestVO api

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

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

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

 

 

對於列表的操做,能夠自定義:例以下面的指定list的大小(固然,自帶的@Size能夠實現)app

/**
 * 指定列表的大小
 *
 * @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;
    }
}

 

使用以下:maven

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

  

{
  "code": 5006,
  "message": "參數校驗失敗, 無效的案例圖片",
  "status": 1
}
相關文章
相關標籤/搜索