成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JSR-303 參數(shù)校驗

VishKozus / 2864人閱讀

摘要:參數(shù)校驗代碼見常規(guī)使用請求參數(shù)加上符合校驗注解包括基本類型和自定義類。校驗注解是在方法入?yún)⑸?,則需要在該方法所在的類上添加注解,在入?yún)⑶盎蚴窃诜椒ㄉ咸砑訂⒂眯r炞⒔舛疾簧АPr炞⒔馐褂迷诜椒ㄈ雲(yún)⑸蠒r,拋出的是異常。

JSR-303 參數(shù)校驗

代碼見validator-demo

1、常規(guī)使用

1.1、請求參數(shù)加上符合JSR-303校驗注解(包括基本類型和自定義類)。如果請求參數(shù)是自定義類,則在類的屬性上加校驗注解。

1.2、請求參數(shù)前面加上 @javax.validation.Valid 注解,或是 @org.springframework.validation.annotation.Validated 注解,告訴spring框架調用時進行參數(shù)校驗。

1.3、校驗注解是在方法入?yún)⑸?,則需要在該方法所在的類上添加 @org.springframework.validation.annotation.Validated 注解,在入?yún)⑶盎蚴窃诜椒ㄉ咸砑訂⒂眯r炞⒔舛疾簧А?/p>

1.4、如果請求參數(shù)列表中有 BindingResult,則springmvc框架不會向外拋異常,默認代碼自行處理。

2、自定義注解

2.1、創(chuàng)建自定義注解

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * 無敏感詞校驗注解
 */
@Documented
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NoSensitiveWordsValidator.class)
public @interface NoSensitiveWords {

    String message() default "包含敏感詞";

    Class[] groups() default {};

    Class[] payload() default {};
}

2.2、自定義注解對應的校驗類

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;

/**
 * 敏感詞校驗邏輯
 **/
public class NoSensitiveWordsValidator implements ConstraintValidator {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value == null || "".equals(value.trim())) {
            return true;
        }
        // 這里只簡單舉例校驗
        Set sensitiveWords = new HashSet<>();
        sensitiveWords.add("毛澤東");
        sensitiveWords.add("鄧小平");
        for (String word : sensitiveWords) {
            if (value.contains(word)) {
                return false;
            }
        }
        return true;
    }
}

2.3、在類屬性或方法入?yún)⑸鲜褂米远x注解

@Data
public class Account {

    /** 昵稱 */
    @Length(min = 2, max = 20)
    @NoSensitiveWords
    private String nickName;
}
3、自定義異常

3.1、校驗注解使用在實體參數(shù)上時,spring拋出的是org.springframework.web.bind.MethodArgumentNotValidException異常。

3.2、校驗注解使用在方法入?yún)⑸蠒r,spring拋出的是javax.validation.ConstraintViolationException異常。

3.3、針對上述兩種情況,可以做統(tǒng)一的攔截并封裝成統(tǒng)一的系統(tǒng)異常

import lombok.extern.slf4j.Slf4j;
import org.linbo.demo.validator.bean.HttpResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.validation.ConstraintViolationException;
import java.util.List;
import java.util.stream.Collectors;

@ControllerAdvice
@ResponseBody
@Slf4j
public class DefaultExceptionHandler {

    @ExceptionHandler(value = {MethodArgumentNotValidException.class})
    public HttpResult springValidException(MethodArgumentNotValidException e) {
        List allErrors = e.getBindingResult().getAllErrors();
        StringBuilder buf = new StringBuilder();
        allErrors.forEach(error -> {
            String objectName = ((FieldError) error).getField();
            String message = error.getDefaultMessage();
            buf.append(objectName).append(":").append(message).append(", ");
        });
        int len = buf.length();
        if (len > 1) {
            buf.delete(len - 2, len);
        }
        HttpResult data = HttpResult.builder()
                .code("400")
                .message(buf.toString())
                .build();
        log.warn("參數(shù)校驗錯誤: {}", data);
        return data;
    }

    @ExceptionHandler(value = {ConstraintViolationException.class})
    public HttpResult jsr303ValidException(ConstraintViolationException e) {
        HttpResult data = HttpResult.builder()
                .code("400")
                .message(e.getMessage())
                .build();
        log.warn("參數(shù)校驗錯誤: {}", data);
        return data;
    }

}
4、國際化校驗異常信息

4.1、在resources目錄下新增ValidationMessages.properties文件,英文為ValidationMessages_en.properties,中文為英文為ValidationMessages_zh_CN.properties,與標準國際化命名類型,都是ValidationMessages開頭命令。

4.2、定義信息key和value

4.3、在自定義校驗注解的String message() default "{properties中定義的key}"中,
或是在使用校驗注解時(@Length(min = 2, max = 20, message = "{properties中定義的key}"))加入properties中定義的key。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/75372.html

相關文章

  • 記錄_使用JSR303規(guī)范進行數(shù)據(jù)校驗

    摘要:時間年月日星期三說明使用規(guī)范校驗接口請求參數(shù)源碼第一章理論簡介背景介紹如今互聯(lián)網(wǎng)項目都采用接口形式進行開發(fā)。該規(guī)范定義了一個元數(shù)據(jù)模型,默認的元數(shù)據(jù)來源是注解。 時間:2017年11月08日星期三說明:使用JSR303規(guī)范校驗http接口請求參數(shù) 源碼:https://github.com/zccodere/s... 第一章:理論簡介 1-1 背景介紹 如今互聯(lián)網(wǎng)項目都采用HTTP接口...

    187J3X1 評論0 收藏0
  • 使用jsr303規(guī)范驗證數(shù)據(jù)

    摘要:我們有時需要對前端傳過來的數(shù)據(jù)做校驗,就可以使用。他可以使我們不用在每個編寫校驗代碼,可以達到解耦的功能。本文環(huán)境為,框架使用。 我們有時需要對前端傳過來的數(shù)據(jù)做校驗,就可以使用spring validation。他可以使我們不用在每個Controller編寫校驗代碼,可以達到解耦的功能。本文環(huán)境為jdk8,框架使用springboot 2.1.0.RELEASE。1.添加依賴 ...

    Pandaaa 評論0 收藏0
  • SpringBoot 實戰(zhàn) (十五) | 服務端參數(shù)校驗之一

    摘要:前言估計很多朋友都認為參數(shù)校驗是客戶端的職責,不關服務端的事。輕則導致服務器宕機,重則泄露數(shù)據(jù)。所以,這時就需要設置第二道關卡,服務端驗證了。老項目的服務端校驗不能為空不能為空看以上代碼,就一個的校驗就如此麻煩。 前言 估計很多朋友都認為參數(shù)校驗是客戶端的職責,不關服務端的事。其實這是錯誤的,學過 Web 安全的都知道,客戶端的驗證只是第一道關卡。它的參數(shù)驗證并不是安全的,一旦被有心人...

    QiShare 評論0 收藏0
  • Spring Boot - 表單校驗JSR303&Hibernate Validator)

    摘要:初步使用主要使用注解的方式對進行校驗,第一個例子在需要校驗的字段上指定約束條件然后在中可以這樣調用,加上注解即可。如果校驗失敗,默認會返回框架的出錯信息。指定到的分組名會全部進行校驗,不指定的不校驗。 Spring Boot - 表單校驗(JSR303&Hibernate Validator) 回顧 Spring Boot - 初識 Hello World Spring Boot -...

    tinyq 評論0 收藏0
  • 使用spring validation 作為數(shù)據(jù)校驗

    摘要:本文主要介紹在中自動校驗的機制。引入依賴我們使用構建應用來進行演示。在中校驗數(shù)據(jù)值得注意的地方參數(shù)前需要加上注解,表明需要對其進行校驗,而校驗的信息會存放到其后的中。層改寫方法限定需要進行校驗,而方法則不做限制。 簡介 JSR303/JSR-349,hibernate validation,spring validation之間的關系。JSR303是一項標準,JSR-349是其的升級版...

    huangjinnan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<