В настоящее время я экспериментирую с некоторыми RESTful JAX, и я хочу проверить пользовательский ввод. Обычно регулярное выражение будет хорошо, но мне нужно сделать более обширную проверку (~ 10 различных шаблонов регулярных выражений). Я нашел this page при поиске проверки jaxrs. Я отметил, что он говорит «Проект», но я думал, что попробую.JAX-RS custom pathparam validator
я написал параметр аннотацию вроде этого:
@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» веб-сервис e получает вызов, и я представлен «проверен с: 11». Веб-сервис работает отлично, за исключением того, что валидатор не вызван.
Я попытался установить точки останова в классе валидатора и интерфейсе аннотации, но ни один из них не попал.
У меня есть подозрительное подозрение, что я делаю то, что невозможно из-за заголовка «Черновик» в документации, на которую ссылается. Поэтому, если я делаю что-то неправильно или есть альтернативы, я рад это слышать.
Если вы используете реализацию RestEasy JAX-RS, вы можете интегрировать esily JAX-RS с проверкой Bean (JSR 303) http://docs.jboss.org/seam/3/rest/latest/reference/en-US/html /rest.validation.html –