Я использую реализацию ConstraintValidator, как указано ниже, для проверки объекта запроса для службы REST с пружинной загрузкой.
@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = MyRequestValidator.class)
@Documented
public @interface MyRequestValidation {
String message() default "Mandatory fields missing";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class MyRequestValidator
implements
ConstraintValidator<MyRequestValidation, MyRequest>{
@Override
public void initialize(MyRequestValidation constraintAnnotation) {
// Nothing to do here
}
@Override
public boolean isValid(MyRequest myRequest, ConstraintValidatorContext context) {
//do some validation
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("Id can contain only alphabets and digits")
.addPropertyNode("id")
.addConstraintViolation();
}
}
//REST end point
public interface RestApi{
@Produces(MediaType.XML)
@Consumes(MediaType.XML)
@POST
MyResponse action(@MyRequestValidation MyRequest myRequest);
}
@Component
public class RestApiImpl implements RestApi {
..
}
Это выводит как
[PARAMETER]
[myRequest.arg0.id]
[Id can contain only alphabets and digits]
Есть ли способ произвести JSON илиXML-сообщение (или на основе аннотации @Produces в конечной точке REST).Я использую Hibernate реализации этих интерфейсов ConstraintValidatorContext