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

springboot中使用ConstraintValidatorContext驗證兩個字段內容相同

 更新時間:2024年10月15日 09:44:22   作者:張占嶺  
開發(fā)修改密碼功能時,通過ConstraintValidator校驗新密碼和確認新密碼的一致性,首先定義Matches注解和DTO對象,然后創(chuàng)建MatchesValidator類實現驗證邏輯,對springboot驗證字段內容相同問題感興趣的朋友一起看看吧

場景

我在開發(fā)修改密碼功能,通過原密碼和新密碼及確認新密碼,希望通過ConstraintValidator這個方式來校驗新密碼和確認新密碼,規(guī)則是這兩個密碼需要是相同的。

參考文檔

實現

定義Matches注解

@Constraint(validatedBy = SameContentMatchesValidator.class)
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface SameContentMatches {
	String message() default "內容不一致";
	Class<?>[] groups() default {};
	Class<? extends Payload>[] payload() default {};
	String field(); // 新增屬性,指定要比較的字段
}

定義DTO對象

@Data
public class UserModifyPasswordDTO implements UserDTO {
	@NotNull
	private String userName;
	@NotNull
	private String password;
	private String newPassword;
	@SameContentMatches(field = "newPassword")
	private String confirmPassword;
}

定義MatchesValidator對象,實現驗證的代碼邏輯

public class SameContentMatchesValidator implements ConstraintValidator<SameContentMatches, String> {
    private String field;
    @Override
    public void initialize(SameContentMatches constraintAnnotation) {
        this.field = constraintAnnotation.field();
    }
    @Override
    public boolean isValid(String object, final ConstraintValidatorContext context) {
        return true;
    }
}

遇到的問題

  • 在MatchesValidator類中,無法獲取到當前對象,除非把SameContentMatches注解作用到當前類上面,而非字段上面。
  • 這個問題應該主是無法解決的,因為你攔截的是字段,在這個ConstraintValidatorContext處理的都是和當前字段有關的信息

應用到類上,代碼調整,問題解決

@Constraint(validatedBy = SameContentMatchesValidator.class)
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface SameContentMatches {
	String message() default "內容不一致";
	Class<?>[] groups() default {};
	Class<? extends Payload>[] payload() default {};
	/**
	 * 源字段名
	 * @return
	 */
	String sourceField();
	/**
	 * 目標字段名
	 * @return
	 */
	String destinationField();
}
public class SameContentMatchesValidator implements ConstraintValidator<SameContentMatches, Object> {
	private String sourceField;
	private String destinationField;
	@Override
	public void initialize(SameContentMatches constraintAnnotation) {
		this.sourceField = constraintAnnotation.sourceField();
		this.destinationField = constraintAnnotation.destinationField();
	}
	@Override
	public boolean isValid(Object o, final ConstraintValidatorContext context) {
		final Object sourceFieldVal = BeanUtil.getProperty(o, this.sourceField);
		final Object destinationFieldVal = BeanUtil.getProperty(o, this.destinationField);
		return sourceFieldVal.equals(destinationFieldVal);
	}
}
@Data
@SameContentMatches(sourceField = "confirmPassword", destinationField = "newPassword")
public class UserModifyPasswordDTO implements UserDTO {
	@NotNull
	private String userName;
	@NotNull
	private String password;
	private String newPassword;
	private String confirmPassword;
}

上面的代碼SameContentMatches注解出現了弱編碼,這塊需要再進行優(yōu)化。

到此這篇關于springboot中使用ConstraintValidatorContext驗證兩個字段內容相同的文章就介紹到這了,更多相關springboot驗證字段內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot?整合數據源的具體實踐

    SpringBoot?整合數據源的具體實踐

    本文主要介紹了SpringBoot?整合數據源的具體實踐,利用?Spring?Boot?的自動配置和簡化的注解來簡化數據源配置工作,從而更專注于應用程序的業(yè)務邏輯開發(fā),感興趣的可以了解一下
    2023-11-11
  • Java 多線程優(yōu)先級實例詳解

    Java 多線程優(yōu)先級實例詳解

    這篇文章主要介紹了Java 多線程優(yōu)先級實例詳解的相關資料,需要的朋友可以參考下
    2017-04-04
  • Java實現中英文詞典功能

    Java實現中英文詞典功能

    這篇文章主要為大家詳細介紹了Java實現中英文詞典功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • IDEA生成可運行jar包(包含第三方jar包)流程詳解

    IDEA生成可運行jar包(包含第三方jar包)流程詳解

    這篇文章主要介紹了IDEA生成可運行jar包(包含第三方jar包)流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 使用Spring boot 的profile功能實現多環(huán)境配置自動切換

    使用Spring boot 的profile功能實現多環(huán)境配置自動切換

    這篇文章主要介紹了使用Spring boot 的profile功能實現多環(huán)境配置自動切換的相關知識,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-11-11
  • SpringBoot應用優(yōu)雅停機的3種標準方案

    SpringBoot應用優(yōu)雅停機的3種標準方案

    所謂優(yōu)雅停機(Graceful Shutdown),就是讓應用在關閉前停止接收新請求;把正在處理的請求執(zhí)行完;釋放線程池、連接池、MQ 消費者等資源;最后再安全退出,今天講清楚 SpringBoot優(yōu)雅停機的3種標準方案,生產直接抄配置,需要的朋友可以參考下
    2026-03-03
  • Java關于IO流的全面介紹

    Java關于IO流的全面介紹

    下面小編就為大家?guī)硪黄狫ava關于IO流的全面介紹。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • springBoot詳解集成Swagger流程

    springBoot詳解集成Swagger流程

    Swagger是一個規(guī)范和完整的框架,用于生成、描述、調用和可視化?Restful?風格的?Web?服務??傮w目標是使客戶端和文件系統(tǒng)作為服務器以同樣的速度來更新。文件的方法、參數和模型緊密集成到服務器端的代碼,允許API來始終保持同步
    2022-06-06
  • Spring中的@Pointcut切點詳解

    Spring中的@Pointcut切點詳解

    這篇文章主要介紹了Spring中的@Pointcut切點詳解,pointcut就是切點,通知需要在哪些方法處進行增強,在AspectJ中用@Pointcut注解表達式標注,需要的朋友可以參考下
    2023-08-08
  • Spingmvc中的HandlerMapping剖析

    Spingmvc中的HandlerMapping剖析

    這篇文章主要介紹了Spingmvc中的HandlerMapping剖析,Spingmvc中的HandlerMapping負責解析請求URL,對應到Handler進行處理,這里的Handler一般為Controller里的一個方法method,也可以為servlet或者Controller等,需要的朋友可以參考下
    2023-09-09

最新評論

周口市| 镇雄县| 云和县| 文山县| 惠来县| 兴安县| 福海县| 宝坻区| 五指山市| 腾冲县| 松溪县| 阜新市| 波密县| 贵溪市| 诸暨市| 云阳县| 宁城县| 阳朔县| 阿拉善盟| 开化县| 南投市| 怀来县| 池州市| 永嘉县| 沁源县| 黄石市| 当涂县| 香格里拉县| 班戈县| 稷山县| 稷山县| 繁昌县| 军事| 邻水| 菏泽市| 盐亭县| 仙桃市| 云阳县| 修武县| 黑山县| 八宿县|