2016-04-08 19 views
1

Özel çekirdek doğrulaması oluşturmaya çalışıyorum ancak bazı nedenlerle çalışmıyor. Birisi bana sorunun ne olduğunu söyleyebilir mi?Özel Fasulye Doğrulaması çalışmıyor

Benim Ana sınıfı:

package validationtest; 

import java.text.ParseException; 

public class Main { 

    /** 
    * @param args the command line arguments 
    * @throws java.text.ParseException 
    * @throws java.lang.IllegalAccessException 
    */ 
    public static void main(String[] args) throws ParseException, IllegalArgumentException, IllegalAccessException { 
     Text msg = new Text(); 
     System.out.println(msg.getMessage(""));  
    } 

} 

class Text { 
    public String getMessage(@NotEmpty(message = "Field message") String msg) { 
     return msg; 
    } 
} 

Benim doğrulama arayüzü

package validationtest; 

import java.lang.annotation.Documented; 
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; 

@Documented 
@Target({ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
@Constraint(validatedBy = NotEmptyImpl.class) 
public @interface NotEmpty { 

    String message() default ""; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default{}; 
} 

Benim doğrulama

package validationtest; 

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

public class NotEmptyImpl implements ConstraintValidator<NotEmpty, String> { 

    @Override 
    public void initialize(NotEmpty annotation) { 
     throw new RuntimeException("The field is not empty: " + annotation.message()); 
    } 

    @Override 
    public boolean isValid(String value, ConstraintValidatorContext context) { 
     if (value == null) { 
      return false; 
     } 
     return !"".equals(value); 
    } 

} 

Not uygulamak: Ben paketi validation-api-1.1.0.Final eklendi .jar sınıf yoluna.

+0

içinde yalnızca API'yi yüklediniz? Impl değil? (örneğin, Hazırda Bekletme Validatoru) – BalusC

+0

Tüm Hibernate kavanozlarına sınıf yolunu ekledim: hibernate-validator-5.2.4.Final –

+0

Java ek açıklamalarının sadece "işaretçiler" olduğunu unutmayın: bunlar otomatik olarak "çalışmaz" veya davranışı yoktur. Bazı çerçeve veya araçların açıklamalarını okuması ve ardından uygun davranışı yürütmesi gerekir. Bu durumda, doğrulayıcıyı programlayıcı olarak nasıl uygulayacağımı anlamak için Hazırda Bekleme Validators hakkında biraz bilgi okumanız gerektiğini düşünüyorum. – DavidS

cevap

1

Örneğin, fasulye validasyonunun uygulanmasını eklemeniz gerekir - Hazırda Bekleme Validator 5.0. Maven bağımlılık:

public static void main(String[] args) throws NoSuchMethodException { 
    ValidatorFactory vf = Validation.buildDefaultValidatorFactory(); 
    Validator validator = vf.getValidator(); 

    Text msg = new Text(); 

    String inParam = ""; 

    Method method = Text.class.getMethod("getMessage", String.class); 
    ExecutableValidator methodValidator = validator. forExecutables(); 
    Set<ConstraintViolation<Text>> violations = 
     methodValidator.validateParameters(msg, method, new Object[]{inParam}); 
    if (violations.size() > 0) { 
     violations.forEach(v -> System.out.println(v.getMessage())); 
    } else { 
     //if ok - executing method 
     msg.getMessage(inParam); 
     //or if return value also need validation: 
     //violations = methodValidator.validateReturnValue(msg, method, msg.getMessage("")); 
     //violations.forEach(v -> System.out.println(v.getMessage())); 
    } 

    vf.close(); 
} 

çıktı:

Field message 

Dip not

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

Sonra ValidatorFactory + Validator başlatmak ve ExecutableValidator ile yöntemini yürütmek için gereken Ve not "not new ..." NotEmptyImpl

+0

Cevabınız için teşekkürler. Text sınıfının getMessage yöntemini çağırırken bir dizenin boş olup olmadığını kontrol etmenin herhangi bir yolu var mı? –

+0

@OMDOmbudsmanSolutions İç mekan yöntemini kontrol edebilir ve ihtiyaç duyulduğunda fasülye validasyonu olmadan istisna atarsınız. – Rustam

+0

Teşekkürler, saygılarımla! –

İlgili konular