Bom, não é bem exatamente o que procuras.
Mas extendi a classe Validator para adicionar um retorno em JSON referente aos erros.
Segue a minha classe para você ter uma ideia.
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.proxy.Proxifier;
import br.com.caelum.vraptor.validator.*;
import br.com.caelum.vraptor.view.Results;
import br.com.caelum.vraptor.view.ValidationViewsFactory;
import br.com.mng.sisclinica.sis2000.errors.*;
import javax.enterprise.inject.Specializes;
import javax.inject.Inject;
import javax.validation.MessageInterpolator;
import java.util.Locale;
import java.util.ResourceBundle;
@Specializes
public class ValidatorResult extends DefaultValidator {
/**
* @deprecated CDI eyes only.
*/
protected ValidatorResult() {
this(null, null, null, null, null, null, null, null, null);
}
@Inject
public ValidatorResult(Result result, ValidationViewsFactory factory, Outjector outjector, Proxifier proxifier,
ResourceBundle bundle, javax.validation.Validator bvalidator, MessageInterpolator interpolator, Locale locale,
Messages messages) {
super(result, factory, outjector, proxifier, bundle, bvalidator, interpolator, locale, messages);
}
public ValidatorResult onErrorRender() {
this.onErrorUse(Results.json()).from(this.getErrors(), "errors").serialize();
return this;
}
public Validator addIf(boolean expression, br.com.mng.sisclinica.sis2000.errors.Error error) {
this.addIf(expression, new I18nMessage(error.getScope(), error.getMessage()));
return this;
}
public Validator addIf(boolean expression, br.com.mng.sisclinica.sis2000.errors.Error error, Object... parameters) {
this.addIf(expression, new I18nMessage(error.getScope(), error.getMessage(), parameters));
return this;
}
}