¿Cómo uso un validador personalizado con dropwizard?
Tengo una API REST escrita por otra persona en la que el método que maneja la solicitud a una URL particular acepta un montón de parámetros que se completan a partir de parámetros de ruta.
@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
}
La persona que escribió esto ha usado DropWizard y no tengo experiencia previa trabajando en ello. Tengo la tarea de validar el campo studentId comparándolo con los valores en el db. Esto sería bastante sencillo, pero me han dicho que lo haga usando un validador personalizado. Soy bastante nuevo en escribir anotaciones, pero después de mucho cavar escribí una anotación como esta,
@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;
}
}
}
Después de esto, agregué la anotación al campo en el que quería ejecutar la validación de esta manera,
public Response processFile(@FormDataParam("sourceFile") InputStream aStream, @PathParam("classid") String classId, @StudentIdValidator @PathParam("studentid") String studentId, @Context HttpServletRequest httpRequest)
Ahora el problema es que, cuando ejecuto / depuro el código ... no se llama a este validador, tampoco tengo idea de cómo obtener el valor de studentId dentro de la clase de validación studentId. Entonces cavé un poco más y agregué esto al archivo de la aplicación
class MyApplication extends Application<MyConfiguration> {
........
@Override
public void run(MyConfiguration myConfiguration, Environment currentEnvironment) {
currentEnvironment.jersey().register(StudentIdValidator.class);
}
Estoy literalmente al final de mi ingenio. Cualquier ayuda será muy MUY apreciada. Perdón por el mal formato.