最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Hibernate validator使用以及自定義校驗(yàn)器注解

 更新時(shí)間:2020年01月18日 10:07:34   作者:DFYoung  
這篇文章主要介紹了Hibernate validator使用以及自定義校驗(yàn)器注解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

JSR-303 是 JAVA EE 6 中的一項(xiàng)子規(guī)范,叫做 Bean Validation,用于對(duì) Java Bean 中的字段的值進(jìn)行驗(yàn)證。Hibernate Validator則是Hibdernate提供的一種對(duì)該規(guī)范的實(shí)現(xiàn)。

——即Hibernate Validator是用來做參數(shù)校驗(yàn)。

使用Hibernate Validator提供的注解進(jìn)行參數(shù)校驗(yàn)

注解 釋義
@Null 必須為null
@NotNull 不能為null
@AssertTrue 必須為true
@AssertFalse 必須為false
@Min 必須為數(shù)字,其值大于或等于指定的最小值
@Max 必須為數(shù)字,其值小于或等于指定的最大值
@DecimalMin 必須為數(shù)字,其值大于或等于指定的最小值
@DecimalMax 必須為數(shù)字,其值小于或等于指定的最大值
@Size 集合的長度
@Digits 必須為數(shù)字,其值必須再可接受的范圍內(nèi)
@Past 必須是過去的日期
@Future 必須是將來的日期
@Pattern 必須符合正則表達(dá)式
@Email 必須是郵箱格式
@Length 長度范圍
@NotEmpty 不能為null,長度大于0
@Range 元素的大小范圍
@NotBlank 不能為null,字符串長度大于0(限字符串)

引入依賴

<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-validator</artifactId>
 <version>6.0.15.Final</version>
</dependency>

Hibernate Validator常用注解

創(chuàng)建測試類

注意必須先進(jìn)行為null判斷,否則其他注解有的不會(huì)生效。
比如username加了@Length而不加@NotNull注解,當(dāng)沒有輸入username,那么@Length判斷將不會(huì)生效,判斷為null的有@NotNull、@NotEmpty以及@NotBlank
建議自行去掉@NotNull再測試一下

package com.dfyang.validator.entity;

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;

public class User {
 @NotBlank(message = "名稱不能為空")
 private String name;

 @Range(min = 1, max = 120, message = "年齡必須為1-120歲")
 private Integer age;

 @NotBlank(message = "描述不能為空")
 private String description;

 @NotNull
 @Length(min = 6, max = 18, message = "用戶名長度必須為6-18位")
 private String username;

 @NotNull
 @Length(min = 6, max = 18, message = "密碼長度必須為6-18位")
 private String password;

 /** get、set方法 */
}

創(chuàng)建測試Controller

@Valid用在參數(shù)上,表示對(duì)該參數(shù)進(jìn)行校驗(yàn)。

如果對(duì)參數(shù)校驗(yàn)發(fā)現(xiàn)有誤,會(huì)將錯(cuò)誤注入到BindingResult中

我們這里將錯(cuò)誤進(jìn)行打印,也可以直接拋出異常

package com.dfyang.validator.controller;

import com.dfyang.validator.entity.User;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

@RestController
public class UserController {

 @GetMapping("/insert")
 @ResponseBody
 public User insertUser(@Valid User user, BindingResult result) {
  if (result.hasErrors()) {
   for (ObjectError error : result.getAllErrors()) {
    System.err.println(error.getDefaultMessage());
   }
  }
  return user;
 }
}

輸入 http://localhost:8080/insert?name=張三&descripyion=&age=0&username=123123

使用自定義校驗(yàn)器進(jìn)行參數(shù)校驗(yàn)

創(chuàng)建自定義注解,用于判斷年齡是否符合約束

package com.dfyang.validator.constraint;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 性別約束
 */
@Target({ ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = SexConstraintValidator.class)
public @interface Sex {

 String message() default "性別有誤";

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

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

判斷注解的值是否符合約束,這里進(jìn)行了為null判斷,也可以不進(jìn)行在多加一個(gè)@NutNull

package com.dfyang.validator.constraint;

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

/**
 * 性別約束邏輯判斷
 */
public class SexConstraintValidator implements ConstraintValidator<Sex, String> {
 @Override
 public boolean isValid(String value, ConstraintValidatorContext context) {
  return value != null && (value.equals("男") || value.equals("女"));
 }
}

@Target用于指定使用范圍,該處限定只能在字段上使用
@Retention(RetentionPolicy.RUNTIME)表示注解在運(yùn)行時(shí)可以通過反射獲取到
@Constraint(validatedBy = xxx.class)指定該注解校驗(yàn)邏輯

2.創(chuàng)建校驗(yàn)實(shí)體,使用Hibernate Validator自帶注解以及自定義的注解

package com.dfyang.validator.entity;

import com.dfyang.validator.constraint.Sex;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

public class User {
 @NotBlank(message = "名稱不能為空")
 private String name;

 @Range(min = 1, max = 120, message = "年齡必須為1-120歲")
 private Integer age;

 @Sex
 private String sex;

 @NotBlank(message = "描述不能為空")
 private String description;

 @NotNull(message = "用戶名不能為空")
 @Length(min = 6, max = 18, message = "用戶名長度必須為6-18位")
 private String username;

 @NotNull(message = "密碼不能為空")
 @Length(min = 6, max = 18, message = "密碼長度必須為6-18位")
 private String password;
 
 /** 省略get、set */
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • idea在工具欄中顯示快速創(chuàng)建包和類的圖標(biāo)的詳細(xì)步驟

    idea在工具欄中顯示快速創(chuàng)建包和類的圖標(biāo)的詳細(xì)步驟

    點(diǎn)擊需要?jiǎng)?chuàng)建包或者類的位置,在點(diǎn)擊對(duì)用的圖標(biāo)就可以快速創(chuàng)建類或者包了,下面小編給大家介紹idea在工具欄中顯示快速創(chuàng)建包和類的圖標(biāo)的詳細(xì)步驟,感興趣的朋友一起看看吧
    2024-02-02
  • Spring-IOC容器-Bean管理-基于XML方式超詳解

    Spring-IOC容器-Bean管理-基于XML方式超詳解

    這篇文章主要介紹了Spring為IOC容器Bean的管理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 一篇文章帶你了解Java基礎(chǔ)-抽象

    一篇文章帶你了解Java基礎(chǔ)-抽象

    這篇文章主要給大家介紹了關(guān)于Java抽象定義以及舉例的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • idea社區(qū)版如何設(shè)置vm?options

    idea社區(qū)版如何設(shè)置vm?options

    這篇文章主要介紹了idea社區(qū)版如何設(shè)置vm?options問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java實(shí)現(xiàn)摳圖片文字或簽名的完整代碼

    Java實(shí)現(xiàn)摳圖片文字或簽名的完整代碼

    這篇文章主要介紹了java摳圖片文字或簽名的運(yùn)行原理,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Spring Cloud Zipkin服務(wù)端追蹤服務(wù)

    Spring Cloud Zipkin服務(wù)端追蹤服務(wù)

    這篇文章主要介紹了Spring Cloud Zipkin服務(wù)端追蹤服務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Mybatis分頁查詢主從表的實(shí)現(xiàn)示例

    Mybatis分頁查詢主從表的實(shí)現(xiàn)示例

    本文主要介紹了Mybatis分頁查詢主從表的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • Zuul 實(shí)現(xiàn)網(wǎng)關(guān)轉(zhuǎn)發(fā)的五種方式小結(jié)

    Zuul 實(shí)現(xiàn)網(wǎng)關(guān)轉(zhuǎn)發(fā)的五種方式小結(jié)

    這篇文章主要介紹了Zuul 實(shí)現(xiàn)網(wǎng)關(guān)轉(zhuǎn)發(fā)的五種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解Java程序并發(fā)的Wait-Notify機(jī)制

    詳解Java程序并發(fā)的Wait-Notify機(jī)制

    這篇文章主要介紹了詳解Java程序并發(fā)的Wait-Notify機(jī)制,多線程并發(fā)是Java編程中的重要部分,需要的朋友可以參考下
    2015-07-07
  • MybatisPlus #{param}和${param}的用法詳解

    MybatisPlus #{param}和${param}的用法詳解

    這篇文章主要介紹了MybatisPlus #{param}和${param}的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

东方市| 纳雍县| 阜城县| 广灵县| 汾西县| 谢通门县| 彩票| 阜平县| 云安县| 霸州市| 上林县| 长白| 湘潭县| 元江| 射阳县| 福泉市| 遵化市| 兴化市| 平湖市| 寿光市| 永川市| 都安| 大埔区| 卓尼县| 阿勒泰市| 名山县| 介休市| 炎陵县| 肇源县| 镇远县| 临漳县| 孝昌县| 牟定县| 朝阳县| 荆州市| 马公市| 铁力市| 乳山市| 梁河县| 沐川县| 雅安市|