Eu estou usando o validator.onErrorSendBadRequest() que serializa as mensagens de erros armazenadas no validator.
Só que é o seguinte, eu quero poder fazer isso:
if(naoTaAutorizado){
result.use(Results.http()).setStatusCode(403);validator.add(newValidationMessage("O usuário não está autorizado a realizar essa operação","HTTP 403"));
}
validator.onErrorSendBadRequest();
A mensagem é serializada normal, mas eu tb queria que a resposta de erro http fosse 403, mas a resposta de erro http retornada é a 400.
Dá um help?
Lucas_Cavalcanti
vc quer as validações serializadas com o status 403?
if(naoTaAutorizado){result.use(Results.http()).sendError(403,"O usuário não está autorizado a realizar essa operação");return;
}
em todo caso, esse tipo de código não deveria estar num controller, e sim num interceptor.
ThiagoInGuj
Fala Lucas, beleza?
Então, eu havia pensado nessa forma também, só que quando eu uso o sendError o VRaptor vai tentar redirecionar você para a página 403 certo? Eu uso ele no meu interceptor sim, mas nesse caso só vai funcionar quando o cliente da aplicação é o browser. Eu queria uma resposta REST, com o código http 403 e uma mensagem serializada no corpo do http.
Lucas_Cavalcanti
então troque por:
result.use(Results.http()).setStatusCode(403); result.use(Results.representation).from(newValidationMessage("O usuário não está autorizado a realizar essa operação","HTTP 403")).serialize();return;
ThiagoInGuj
Era exatamente isso que eu queria! Valeu Lucas! Por isso que eu amo o VRaptor!
ThiagoInGuj
Lucas, sem querer ser chato, mas como eu faria para serializar os erros do validator de maneira identica ao realizado pelo validator.onErrorSendBadRequest() ? É porque o meu cliente javascript espera receber a mensagem de erro no mesmo padrão do validator.onErrorSendBadRequest()
ThiagoInGuj
Aê Lucas, conseguir fazer aqui:
result.use(Results.http()).setStatusCode(403);
validator.add(new ValidationMessage("O usuário não está autorizado a realizar essa operação", "HTTP 403"));
validator.onErrorUse(Results.json()).from(validator.getErrors(), "errors").serialize();