Como uso um validador personalizado com o dropwizard?
Eu tenho uma API REST escrita por outra pessoa na qual o método que manipula a solicitação para um URL específico aceita vários parâmetros que são preenchidos a partir dos parâmetros do caminho.
@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
}
A pessoa que escreveu isso usou o DropWizard e eu não tenho experiência anterior trabalhando nele. Eu tenho a tarefa de validar o campo studentId comparando-o com os valores no banco de dados. Isso seria bem direto, mas me disseram para fazer isso usando um validador personalizado. Eu sou muito novo em escrever anotações, mas depois de muita pesquisa, escrevi uma anotação como essa,
@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;
}
}
}
Depois disso, adicionei a anotação ao campo em que queria executar a validação dessa maneira,
public Response processFile(@FormDataParam("sourceFile") InputStream aStream, @PathParam("classid") String classId, @StudentIdValidator @PathParam("studentid") String studentId, @Context HttpServletRequest httpRequest)
Agora, o problema é que, quando eu corro / depuro o código ... esse validador não está sendo chamado, também não tenho idéia de como obter o valor de studentId dentro da classe de validação studentId. Então eu cavei um pouco mais e adicionei isso ao arquivo do aplicativo
class MyApplication extends Application<MyConfiguration> {
........
@Override
public void run(MyConfiguration myConfiguration, Environment currentEnvironment) {
currentEnvironment.jersey().register(StudentIdValidator.class);
}
Estou literalmente no fim do meu juízo. Qualquer ajuda será muito MUITO apreciada. Desculpe pela má formatação.