spring boot項(xiàng)目使用(2)-- javax.validation

在上一篇文章中我們集成了swagger ui,搭建了一個restful風(fēng)格的接口礁芦,當(dāng)進(jìn)行邏輯處理的時候蜻韭,我們首先要做的想必一定是參數(shù)校驗(yàn),這篇文章描述了使用javax.validation進(jìn)行參數(shù)校驗(yàn)柿扣。

1.新建實(shí)體類肖方,加上javax.validation的注解

import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.Range;

public class Student {

    @Range(min = 18, max = 60, message = "年齡不合適")
    private int age;

    @NotBlank(message = "學(xué)校不能為空")
    private String school;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }   

}

2.在controller進(jìn)行如下修改

@ApiImplicitParam(name = "student", value = "普通用戶", required = true, dataType = "Student")
@RequestMapping(value = "/second", method = RequestMethod.POST)
public Result test2(@RequestBody @Valid Student student, BindingResult bindingResult){

    //在這里,我們判斷參數(shù)是否通過校驗(yàn)
    if (bindingResult.hasErrors()) {
        String message = bindingResult.getFieldError().getDefaultMessage();
        //自定義的返回窄刘,并將錯誤信息返回
        return Result.error(message);
    }
    
    return Result.commonSuccess();
}

javax.validation可用的注解

空檢查

@Null 驗(yàn)證對象是否為null

@NotNull 驗(yàn)證對象是否不為null, 無法查檢長度為0的字符串

@NotBlank 檢查約束字符串是不是Null還有被Trim的長度是否大于0,只對字符串,且會去掉前后空格.

@NotEmpty 檢查約束元素是否為NULL或者是EMPTY.

Booelan檢查

@AssertTrue 驗(yàn)證 Boolean 對象是否為 true

@AssertFalse 驗(yàn)證 Boolean 對象是否為 false

長度檢查

@Size(min=, max=) 驗(yàn)證對象(Array,Collection,Map,String)長度是否在給定的范圍之內(nèi)

@Length(min=, max=)
驗(yàn)證字符串的長度是否在給定的范圍之內(nèi)窥妇,包含兩端

日期檢查

@Past 驗(yàn)證 Date 和 Calendar 對象是否在當(dāng)前時間之前

@Future 驗(yàn)證 Date 和 Calendar 對象是否在當(dāng)前時間之后

@Pattern 驗(yàn)證 String 對象是否符合正則表達(dá)式的規(guī)則

數(shù)值檢查:建議使用在Stirng,Integer類型,不建議使用在int類型上娩践,因?yàn)楸韱沃禐椤啊睍r無法轉(zhuǎn)換為int活翩,但可以轉(zhuǎn)換為Stirng為"",Integer為null

@Min 驗(yàn)證 Number 和 String 對象是否大等于指定的值

@Max 驗(yàn)證 Number 和 String 對象是否小等于指定的值

@DecimalMax 被標(biāo)注的值必須不大于約束中指定的最大值. 這個約束的參數(shù)是一個通過BigDecimal定義的最大值的字符串表示.小數(shù)存在精度

@DecimalMin 被標(biāo)注的值必須不小于約束中指定的最小值. 這個約束的參數(shù)是一個通過BigDecimal定義的最小值的字符串表示.小數(shù)存在精度

@Digits 驗(yàn)證 Number 和 String 的構(gòu)成是否合法

@Digits(integer=,fraction=) 驗(yàn)證字符串是否是符合指定格式的數(shù)字,interger指定整數(shù)精度翻伺,fraction指定小數(shù)精度材泄。

@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.

@Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage;

@Valid遞歸的對關(guān)聯(lián)對象進(jìn)行校驗(yàn), 如果關(guān)聯(lián)對象是個集合或者數(shù)組,那么對其中的元素進(jìn)行遞歸校驗(yàn),如果是一個map,則對其中的值部分進(jìn)行校驗(yàn).(是否進(jìn)行遞歸驗(yàn)證)

@CreditCardNumber信用卡驗(yàn)證

@Email 驗(yàn)證是否是郵件地址,如果為null,不進(jìn)行驗(yàn)證吨岭,算通過驗(yàn)證拉宗。

@ScriptAssert(lang= ,script=, alias=)

@URL(protocol=,host=, port=,regexp=, flags=)

3.當(dāng)然,有些時候我們還需要一些自定義的校驗(yàn)

編寫自定義校驗(yàn)注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Target( {ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })  
@Retention(RetentionPolicy.RUNTIME)  
@Constraint(validatedBy = MyCheckImpl.class)  
public @interface MyCheck {

    String message() default "未知錯誤";  

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

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

}

實(shí)現(xiàn)類

import java.lang.annotation.Annotation;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MyCheckImpl implements ConstraintValidator<Annotation, String>{

    public void initialize(Annotation arg0) {
    
    }

    public boolean isValid(String arg0, ConstraintValidatorContext arg1) {
        
        // 具體校驗(yàn)方法
        if("男".equals(arg0)||"女".equals(arg0)){
            return true;
        }
    
        return false;

    }

}

在之前的實(shí)體類中使用我們的自定義校驗(yàn)

企業(yè)微信截圖_15263948059898.png

4.測試下效果:
企業(yè)微信截圖_15263950374943.png

[圖片上傳中...(企業(yè)微信截圖_15263952481263.png-f7b8ab-1526395323239-0)]
企業(yè)微信截圖_15263952481263.png
企業(yè)微信截圖_15263952657919.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辣辫,一起剝皮案震驚了整個濱河市旦事,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌急灭,老刑警劉巖姐浮,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異葬馋,居然都是意外死亡卖鲤,警方通過查閱死者的電腦和手機(jī)肾扰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛋逾,“玉大人集晚,你說我怎么就攤上這事∏唬” “怎么了偷拔?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沉颂。 經(jīng)常有香客問我条摸,道長悦污,這世上最難降的妖魔是什么铸屉? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮切端,結(jié)果婚禮上彻坛,老公的妹妹穿的比我還像新娘。我一直安慰自己踏枣,他們只是感情好昌屉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茵瀑,像睡著了一般间驮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上马昨,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天竞帽,我揣著相機(jī)與錄音,去河邊找鬼鸿捧。 笑死屹篓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匙奴。 我是一名探鬼主播堆巧,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泼菌!你這毒婦竟也來了谍肤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哗伯,失蹤者是張志新(化名)和其女友劉穎荒揣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笋颤,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乳附,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年内地,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赋除。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡阱缓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出举农,到底是詐尸還是另有隱情荆针,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布颁糟,位于F島的核電站航背,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棱貌。R本人自食惡果不足惜玖媚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望婚脱。 院中可真熱鬧今魔,春花似錦、人聲如沸障贸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篮洁。三九已至涩维,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袁波,已是汗流浹背瓦阐。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锋叨,地道東北人垄分。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像娃磺,于是被迫代替她去往敵國和親薄湿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.連你的眼淚也 愛久見人心 少女 飛翔 點(diǎn)頭 2.愛情來臨時 重力 那個人 香氣 熱氣 3.我最親愛的 陪...
    萬歲耶耶耶閱讀 97評論 0 0