Ich habe eine REST-API geschrieben von jemand anderem, in dem die Methode, die die Anfrage an eine bestimmte URL behandelt, eine Reihe von Parametern akzeptiert, die von Pfadparametern aufgefüllt werden.Wie verwende ich einen benutzerdefinierten Validator mit Dropwizard?
Die Person, die dies geschrieben hat, hat DropWizard verwendet und ich habe keine vorherige Erfahrung daran zu arbeiten. Ich habe die Aufgabe, das Feld studentId zu validieren, indem ich es mit Werten in der Datenbank vergleiche. Dies wäre ziemlich einfach, aber mir wurde gesagt, es mit einem benutzerdefinierten Validator zu tun. Ich bin ziemlich neu zu schreiben Anmerkungen aber nach viel zu graben eine Anmerkung wie dieser,
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = StudentIdValidator.StudentIdValidation.class)
public @interface StudentIdValidator {
String message() default "{Invalid Id}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
class StudentIdValidation implements ConstraintValidator<StudentIdValidator, String> {
@Override
public void initialize(StudentIdValidator constraintAnnotation) {
System.out.println("Annotation initialize !!!!!!!!!");
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// TODO Auto-generated method stub
System.out.println("Annotation called");
return false;
}
}
}
Danach schrieb ich die Anmerkung zum Feld hinzugefügt ich die Validierung wie diese laufen wollte,
public Response processFile(@FormDataParam("sourceFile") InputStream aStream, @PathParam("classid") String classId, @StudentIdValidator @PathParam("studentid") String studentId, @Context HttpServletRequest httpRequest)
Nun das Problem ist, dass, wenn ich den Code ausführen/debuggen ... dieser Validator nicht aufgerufen wird, auch habe ich keine Idee, wie Sie den Wert von studentId innerhalb der Validierungsklasse studentId erhalten. Also grub ich etwas mehr und fügte das zur Anwendungsdatei hinzu
class MyApplication extends Application<MyConfiguration> {
........
@Override
public void run(MyConfiguration myConfiguration, Environment currentEnvironment) {
currentEnvironment.jersey().register(StudentIdValidator.class);
}
Ich bin buchstäblich am Ende meines Verstandes. Jede Hilfe wird sehr geschätzt. Entschuldige die schlechte Formatierung.
und einige weitere Informationen über Validierer und wie die Validierung mit Gruppen erreichen aktiviert, hier: http://stackoverflow.com/questions/37463570/dropwizard-validate-a-field-only -on-post/37480676 # 37480676 – pandaadb
Danke für Ihre Antwort. Wenn ich es versuchte, bekam ich diese Warnung org.glassfish.jersey.internal.inject.Providers: Ein Provider com.shuvro.application.validator.StudentIdValidatior $ StudentIdValidation registriert in SERVER-Laufzeit implementiert keine Provider-Schnittstellen in der Laufzeit SERVER. Aufgrund von Constraint-Konfigurationsproblemen wird der Provider com.shuvro.application.validator.StudentIdValidator.StudentIdValidatior $ StudentIdValidation ignoriert. –
Hallo - Sie müssen Ihren Validator nicht registrieren. Es ist keine Jersey-Komponente, daher weiß Jersey nicht, was damit zu tun ist – pandaadb