Wie verwende ich einen benutzerdefinierten Validator mit dropwizard?
Ich habe eine REST-API von einer anderen Person geschrieben, in der die Methode, die die Anforderung an eine bestimmte URL verarbeitet, eine Reihe von Parametern akzeptiert, die aus Pfadparametern ausgefüllt werden.
@POST
@Path("/{classid}/{studentid}/details")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@SuppressWarnings("unchecked")
public Response processFile(@FormDataParam("sourceFile") InputStream aStream, @PathParam("classid") String classId, @PathParam("studentid") String studentId, @Context HttpServletRequest httpRequest) {
// Code to do stuff and return a response
}
Die Person, die das geschrieben hat, hat DropWizard verwendet, und ich habe noch keine Erfahrung damit. Ich habe die Aufgabe, das studentId-Feld zu validieren, indem ich es mit den Werten in der Datenbank vergleiche. Dies wäre ziemlich einfach, aber mir wurde gesagt, dass ich es mit einem benutzerdefinierten Validator machen soll. Ich bin ziemlich neu im Schreiben von Anmerkungen, aber nachdem ich viel gegraben habe, habe ich eine Anmerkung wie diese geschrieben,
@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;
}
}
}
Nachdem habe ich die Annotation zu dem Feld hinzugefügt, auf dem ich die Validierung ausführen 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 starte / debugge ... dieser Validator nicht aufgerufen wird, ich auch keine Ahnung habe, wie man den Wert von studentId in der studentId-Validierungsklasse erhält. Also habe ich ein paar mehr ausgegraben und dies zur Anwendungsdatei hinzugefügt
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. Entschuldigung für die schlechte Formatierung.