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

java自定義注解驗(yàn)證手機(jī)格式的實(shí)現(xiàn)示例

 更新時間:2021年03月05日 11:42:42   作者:菜-菜-菜  
這篇文章主要介紹了java自定義注解驗(yàn)證手機(jī)格式的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、@Valid與@Validated的區(qū)別

1.1 基本區(qū)別

@Valid:Hibernate validation校驗(yàn)機(jī)制

@Validated:Spring Validator校驗(yàn)機(jī)制,這個也是最常用的

@Validation只是對@Valid進(jìn)行了二次封裝,在使用上并沒有太大區(qū)別,但在分組、注解位置、嵌套驗(yàn)證等功能上有所不同

1.2 作用范圍

@Validated:用在類型、方法和方法參數(shù)上。但不能用于成員屬性(field)
@Valid:可以用在方法、構(gòu)造函數(shù)、方法參數(shù)和成員屬性(field)上

1.3 分組校驗(yàn)

@Validated:提供分組功能,可以在參數(shù)驗(yàn)證時,根據(jù)不同的分組采用不同的驗(yàn)證機(jī)制,注解中必須提供groups屬性,該屬性就是做分組的必要參數(shù)
@Valid:沒有分組功能

2、未使用分組校驗(yàn)的示例

注解:

/**
 * 手機(jī)號驗(yàn)證正則
 */
@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {PhoneValidator.class})// 指定約束處理器,也就是手機(jī)號格式驗(yàn)證是哪個類來做校驗(yàn)
public @interface Phone {

  String pattern() default "^(?:(?:\\+|00)86)?1\\d{10}$";

  String message() default "手機(jī)號格式非法";

  Class<?>[] groups() default { }; // groups用來指定分組,可以讓校驗(yàn)采取不同的機(jī)制,當(dāng)前默認(rèn)未指定任何分組機(jī)制,默認(rèn)每次都要進(jìn)行校驗(yàn)

  Class<? extends Payload>[] payload() default { };
  
  // 默認(rèn)分組
  interface Default{

  }

  // 分組A
  interface A{

  }
}

格式校驗(yàn)處理器:

/**
 * 校驗(yàn)處理器:做手機(jī)號碼格式驗(yàn)證的核心類
 */
public class PhoneValidator implements ConstraintValidator<Phone, String> {

  // 注解對象
  private Phone phone;

  // 初始化【Phone】對象
  @Override
  public void initialize(Phone constraintAnnotation) {
    phone = constraintAnnotation;
  }

  @Override
  public boolean isValid(String value, ConstraintValidatorContext context) {
    // 獲取【Phone】對象的手機(jī)格式驗(yàn)證表達(dá)式
    String pattern = phone.pattern();
    Pattern compile = Pattern.compile(pattern);
    Matcher matcher = compile.matcher(value);
    return matcher.matches();
  }

作用類:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Person implements Serializable {
  
  @Phone
  private String phone;
}

注意:只有在spring或者springboot項(xiàng)目中才能使用,直接調(diào)用方法不會有任何效果,使用注解進(jìn)行對象的屬性格式校驗(yàn)時,必須配合@Validated一起使用(不一起使用,格式校驗(yàn)注解將會無效),正確操作如下:

@RestController
@RequestMapping("/admin/")
public class PersonController {

  @Autowired
  private PersonService personService;

  @PostMapping("/query")
  public Person query(@RequestBody @Validated Person params) {
    return JsonResult.success(personService.queryByPhone(params));
  }
}

以上示例未使用分組功能,因此每次都會校驗(yàn)。

3、分組校驗(yàn)的示例

使用分組校驗(yàn)示示例時,先要看看@Validated注解,因?yàn)榉纸M校驗(yàn)就是配合該注解一起使用的,通過閱讀注釋就能理解到value屬性就是用來指定分組的:

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Validated {

 /**
 * Specify one or more validation groups to apply to the validation step
 * kicked off by this annotation.
 * <p>JSR-303 defines validation groups as custom annotations which an application declares
 * for the sole purpose of using them as type-safe group arguments, as implemented in
 * {@link org.springframework.validation.beanvalidation.SpringValidatorAdapter}.
 * <p>Other {@link org.springframework.validation.SmartValidator} implementations may
 * support class arguments in other ways as well.
 */
 Class<?>[] value() default {};

}

因此我們需要改動的位置有兩處:

  • 首先是注解的作用類,注解上指定groups屬性
  • 其次是controller中的請求的形參:在請求中形參的@Validated指定value值,也就是指定校驗(yàn)生效的分組,如果請求中的分組類型【@Validated的value值】和作用類中注解所指定的分組【@Phone中的groups屬性的值】一致時,才會進(jìn)行校驗(yàn),否則不會執(zhí)行校驗(yàn)

作用類:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Person implements Serializable {
  
  // 指定groups屬性
  @Phone(groups = {Phone.A.class})
  private String phone;

}

controller層:

@RestController
@RequestMapping("/admin/")
public class PersonController {

  @Autowired
  private PersonService personService;

  @PostMapping("/query")
  public Person query(@RequestBody @Validated(Phone.A.class) Person params) {
    return JsonResult.success(personService.queryByPhone(params));
  }
}

此時請求中的校驗(yàn)分組Phone.A.class和作用類中的校驗(yàn)分組Phone.A.class一致,所以校驗(yàn)會被執(zhí)行

到此這篇關(guān)于java自定義注解驗(yàn)證手機(jī)格式的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)java自定義注解驗(yàn)證手機(jī)格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • maven下載依賴失敗問題及解決

    maven下載依賴失敗問題及解決

    這篇文章主要介紹了maven下載依賴失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Spring Boot啟動過程(五)之Springboot內(nèi)嵌Tomcat對象的start教程詳解

    Spring Boot啟動過程(五)之Springboot內(nèi)嵌Tomcat對象的start教程詳解

    這篇文章主要介紹了Spring Boot啟動過程(五)之Springboot內(nèi)嵌Tomcat對象的start的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java實(shí)現(xiàn)根據(jù)地址智能識別省市區(qū)縣

    Java實(shí)現(xiàn)根據(jù)地址智能識別省市區(qū)縣

    這篇文章主要為大家詳細(xì)介紹了如何編寫一個Java工具類,可以根據(jù)身份證地址或用戶輸入的地址,智能識別并提取出詳細(xì)的省市區(qū)縣信息,感興趣的小伙伴可以了解下
    2025-03-03
  • Java程序圖形用戶界面設(shè)計(jì)之按鈕與布局

    Java程序圖形用戶界面設(shè)計(jì)之按鈕與布局

    圖形界面(簡稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對于用戶來說在視覺上更易于接受,本篇精講Java語言中關(guān)于圖形用戶界面的按鈕和布局部分
    2022-02-02
  • 詳解ConcurrentHashMap如何保證線程安全及底層實(shí)現(xiàn)原理

    詳解ConcurrentHashMap如何保證線程安全及底層實(shí)現(xiàn)原理

    這篇文章主要為大家介紹了ConcurrentHashMap如何保證線程安全及底層實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 聊聊關(guān)于Java方法重寫的反思

    聊聊關(guān)于Java方法重寫的反思

    最近在開發(fā)中遇到一個關(guān)于Java方法重寫的一些問題,對于方法重寫的用法以及可能導(dǎo)致的問題產(chǎn)生了一些思考,本文用于記錄下這些想法,希望對大家也有所幫助
    2023-05-05
  • Mybatis批量插入并返回主鍵id的方法

    Mybatis批量插入并返回主鍵id的方法

    本文主要介紹了Mybatis批量插入并返回主鍵id的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java正則表達(dá)式之split()方法實(shí)例詳解

    Java正則表達(dá)式之split()方法實(shí)例詳解

    這篇文章主要介紹了Java正則表達(dá)式之split()方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了split方法的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-03-03
  • 詳解如何熱更新線上的Java服務(wù)器代碼

    詳解如何熱更新線上的Java服務(wù)器代碼

    這篇文章主要介紹了詳解如何熱更新線上的Java服務(wù)器代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Spring整合SpringMVC + Mybatis基礎(chǔ)框架的配置文件詳解

    Spring整合SpringMVC + Mybatis基礎(chǔ)框架的配置文件詳解

    這篇文章主要介紹了Spring整合SpringMVC + Mybatis基礎(chǔ)框架的配置文件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論

资源县| 泾川县| 宜丰县| 新干县| 大埔区| 柘荣县| 开平市| 青铜峡市| 鞍山市| 保康县| 徐水县| 灵台县| 雅安市| 昌邑市| 阿坝| 德清县| 武平县| 龙南县| 舟曲县| 寿宁县| 库尔勒市| 营山县| 周口市| 合肥市| 永和县| 昌邑市| 永定县| 兰坪| 武功县| 芒康县| 衡阳市| 英超| 西华县| 西昌市| 金平| 塔城市| 通海县| 加查县| 女性| 海南省| 齐齐哈尔市|