Я использую реализацию 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
Да, конечная точка @secretsuperstar My Rest помечена как создающая XML. Ответ и ошибки бизнес-проверки (инкапсулированные внутри объектов с аннотированными полями XmlElement) преобразуются в XML, за исключением этих проверок ограничений java.
Вы имеете в виду, вы хотите вернуть ответ json / xml в случае сбоя проверки?