В настоящее время я экспериментирую с некоторыми RESTful JAX и хочу проверить пользовательский ввод. Обычно регулярное выражение подходит, но мне нужно выполнить более тщательную проверку (~ 10 различных шаблонов регулярных выражений). Я нашел эту страницу при поиске проверки jaxrs. Я заметил, что там написано «Черновик», но решил попробовать.
Я написал свою аннотацию параметра следующим образом:
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = FooBarValidator.class)
public @interface FooBarParam
{
}
Валидатор выглядит так:
@Provider
public class FooBarValidator
implements ConstraintValidator<FooBar, Long>
{
@Override
public void initialize(FooBar constraintAnnotation)
{
}
@Override
public boolean isValid(Long value, ConstraintValidatorContext context)
{
// validation goes here, this is a test validation
return (value > 50);
}
}
Веб-сервис выглядит так:
@javax.ejb.Stateless
@Path("test")
public class testRS
{
@GET
@Path("foobar/{fooBar: [0-9]+}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.TEXT_PLAIN)
public String testService(@FooBar @PathParam("fooBar") Long fooBar)
{
return "tested with: " + fooBar;
}
}
Но если я вызываю свою веб-службу в своем браузере, используя «http://localhost:8080/jaxtest/rest/test/foobar/11», веб-служба вызывается, и мне предоставляется «проверено с: 11». Веб-сервис работает нормально, за исключением того, что валидатор не вызывается.
Я пытался установить точки останова в классе валидатора и интерфейсе аннотаций, но ни одна из них не сработала.
У меня есть подозрение, что я делаю что-то невозможное из-за заголовка «Черновик» в указанной документации. Так что, если я делаю что-то не так или есть альтернативы, я рад это слышать.