Как использовать пользовательский валидатор с dropwizard?
У меня есть REST API, написанный кем-то еще, в котором метод, который обрабатывает запрос к определенному URL, принимает набор параметров, которые заполняются из параметров пути.
@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
}
Человек, который написал это, использовал DropWizard, и у меня нет опыта работы над ним. У меня есть задача проверки поля studentId путем сравнения его со значениями в БД. Это было бы довольно просто, но мне сказали сделать это с помощью специального валидатора. Я довольно новичок в написании аннотаций, но после долгих поисков написал аннотацию, подобную этой,
@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;
}
}
}
После этого я добавил аннотацию к полю, в котором я хотел запустить проверку, например,
public Response processFile(@FormDataParam("sourceFile") InputStream aStream, @PathParam("classid") String classId, @StudentIdValidator @PathParam("studentid") String studentId, @Context HttpServletRequest httpRequest)
Теперь проблема в том, что когда я запускаю / отлаживаю код ... этот валидатор не вызывается, также я не знаю, как получить значение studentId внутри класса валидирования studentId. Поэтому я выкопал еще немного и добавил это в файл приложения
class MyApplication extends Application<MyConfiguration> {
........
@Override
public void run(MyConfiguration myConfiguration, Environment currentEnvironment) {
currentEnvironment.jersey().register(StudentIdValidator.class);
}
Я буквально в конце моего ума. Любая помощь будет очень ценится. Извините за плохое форматирование.