第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Hibernate Validator交叉字段驗(yàn)證(JSR 303)

Hibernate Validator交叉字段驗(yàn)證(JSR 303)

Hibernate Validator交叉字段驗(yàn)證(JSR 303)Hibernate Validator 4.x中是否有交叉字段驗(yàn)證的實(shí)現(xiàn)(或第三方實(shí)現(xiàn))?如果不是,實(shí)現(xiàn)交叉字段驗(yàn)證器的最干凈的方法是什么?例如,如何使用API來(lái)驗(yàn)證兩個(gè)bean屬性是否相等(例如驗(yàn)證密碼字段與密碼驗(yàn)證字段匹配)。在注釋中,我希望類(lèi)似于:public class MyBean {   @Size(min=6, max=50)   private String pass;   @Equals(property="pass")   private String passVerify;}
查看完整描述

3 回答

?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

我建議你另一個(gè)可能的解決辦法。也許不那么優(yōu)雅,但更容易!

public class MyBean {
  @Size(min=6, max=50)
  private String pass;

  private String passVerify;

  @AssertTrue(message="passVerify field should be equal than pass field")
  private boolean isValid() {
    return this.pass.equals(this.passVerify);
  }}

這個(gè)isValid方法由驗(yàn)證器自動(dòng)調(diào)用。


查看完整回答
反對(duì) 回復(fù) 2019-06-19
?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

我很驚訝這個(gè)沒(méi)被打開(kāi)。無(wú)論如何,這里有一個(gè)可能的解決方案。

我已經(jīng)創(chuàng)建了一個(gè)類(lèi)級(jí)驗(yàn)證器,而不是原始問(wèn)題中描述的字段級(jí)別。

下面是注釋代碼:

package com.moa.podium.util.constraints;import static java.lang.annotation.ElementType.*;import static java.lang.annotation.RetentionPolicy.*;
import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;
import javax.validation.Constraint;import javax.validation.Payload;@Target({TYPE, ANNOTATION_TYPE})@Retention(RUNTIME)
@Constraint(validatedBy = MatchesValidator.class)@Documentedpublic @interface Matches {

  String message() default "{com.moa.podium.util.constraints.matches}";

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

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

  String field();

  String verifyField();}

而驗(yàn)證器本身:

package com.moa.podium.util.constraints;import org.mvel2.MVEL;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;public class MatchesValidator implements ConstraintValidator<Matches, Object> {

  private String field;
  private String verifyField;


  public void initialize(Matches constraintAnnotation) {
    this.field = constraintAnnotation.field();
    this.verifyField = constraintAnnotation.verifyField();
  }

  public boolean isValid(Object value, ConstraintValidatorContext context) {
    Object fieldObj = MVEL.getProperty(field, value);
    Object verifyFieldObj = MVEL.getProperty(verifyField, value);

    boolean neitherSet = (fieldObj == null) && (verifyFieldObj == null);

    if (neitherSet) {
      return true;
    }

    boolean matches = (fieldObj != null) && fieldObj.equals(verifyFieldObj);

    if (!matches) {
      context.disableDefaultConstraintViolation();
      context.buildConstraintViolationWithTemplate("message")
          .addNode(verifyField)
          .addConstraintViolation();
    }

    return matches;
  }}

注意,我使用了MVEL來(lái)檢查被驗(yàn)證對(duì)象的屬性。這可以用標(biāo)準(zhǔn)反射API代替,或者如果它是您正在驗(yàn)證的特定類(lèi),則訪問(wèn)器方法本身。

然后,可以在bean上使用@Matters注釋?zhuān)缦滤荆?/trans>

@Matches(field="pass", verifyField="passRepeat")public class AccountCreateForm {

  @Size(min=6, max=50)
  private String pass;
  private String passRepeat;

  ...}

作為一個(gè)免責(zé)聲明,我在最后5分鐘寫(xiě)了這個(gè),所以我可能還沒(méi)有解決所有的bug。如果出了什么問(wèn)題,我會(huì)更新答案的。


查看完整回答
反對(duì) 回復(fù) 2019-06-19
  • 3 回答
  • 0 關(guān)注
  • 2200 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)