国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JSR-303 參數(shù)校驗(yàn)

VishKozus / 2857人閱讀

摘要:參數(shù)校驗(yàn)代碼見(jiàn)常規(guī)使用請(qǐng)求參數(shù)加上符合校驗(yàn)注解包括基本類型和自定義類。校驗(yàn)注解是在方法入?yún)⑸希瑒t需要在該方法所在的類上添加注解,在入?yún)⑶盎蚴窃诜椒ㄉ咸砑訂⒂眯r?yàn)注解都不生效。校驗(yàn)注解使用在方法入?yún)⑸蠒r(shí),拋出的是異常。

JSR-303 參數(shù)校驗(yàn)

代碼見(jiàn)validator-demo

1、常規(guī)使用

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

1.2、請(qǐng)求參數(shù)前面加上 @javax.validation.Valid 注解,或是 @org.springframework.validation.annotation.Validated 注解,告訴spring框架調(diào)用時(shí)進(jìn)行參數(shù)校驗(yàn)。

1.3、校驗(yàn)注解是在方法入?yún)⑸希瑒t需要在該方法所在的類上添加 @org.springframework.validation.annotation.Validated 注解,在入?yún)⑶盎蚴窃诜椒ㄉ咸砑訂⒂眯r?yàn)注解都不生效。

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

2、自定義注解

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

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

/**
 * 無(wú)敏感詞校驗(yàn)注解
 */
@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、自定義注解對(duì)應(yīng)的校驗(yàn)類

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

/**
 * 敏感詞校驗(yàn)邏輯
 **/
public class NoSensitiveWordsValidator implements ConstraintValidator {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value == null || "".equals(value.trim())) {
            return true;
        }
        // 這里只簡(jiǎn)單舉例校驗(yàn)
        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、校驗(yàn)注解使用在實(shí)體參數(shù)上時(shí),spring拋出的是org.springframework.web.bind.MethodArgumentNotValidException異常。

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

3.3、針對(duì)上述兩種情況,可以做統(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ù)校驗(yàn)錯(cuò)誤: {}", 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ù)校驗(yàn)錯(cuò)誤: {}", data);
        return data;
    }

}
4、國(guó)際化校驗(yàn)異常信息

4.1、在resources目錄下新增ValidationMessages.properties文件,英文為ValidationMessages_en.properties,中文為英文為ValidationMessages_zh_CN.properties,與標(biāo)準(zhǔn)國(guó)際化命名類型,都是ValidationMessages開頭命令。

4.2、定義信息key和value

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75372.html

相關(guān)文章

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

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

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

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

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

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

    QiShare 評(píng)論0 收藏0
  • Spring Boot - 表單校驗(yàn)JSR303&Hibernate Validator)

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

    tinyq 評(píng)論0 收藏0
  • 使用spring validation 作為數(shù)據(jù)校驗(yàn)

    摘要:本文主要介紹在中自動(dòng)校驗(yàn)的機(jī)制。引入依賴我們使用構(gòu)建應(yīng)用來(lái)進(jìn)行演示。在中校驗(yàn)數(shù)據(jù)值得注意的地方參數(shù)前需要加上注解,表明需要對(duì)其進(jìn)行校驗(yàn),而校驗(yàn)的信息會(huì)存放到其后的中。層改寫方法限定需要進(jìn)行校驗(yàn),而方法則不做限制。 簡(jiǎn)介 JSR303/JSR-349,hibernate validation,spring validation之間的關(guān)系。JSR303是一項(xiàng)標(biāo)準(zhǔn),JSR-349是其的升級(jí)版...

    huangjinnan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<