Tenho um formulário que servirá para envio de mensagem de contato que eu estou enviando via ajax.
No controler o método envia o e-mail e devolve a resposta de sucesso ou não via json.
Em caso de não sucesso de envio da mensagem eu seto status de resposta como 500 e devolvo junto a mensagem de erro.
result.use(Results.http()).setStatusCode(500);
result.use(Results.json()).from("Sua mensagem não pode ser enviada, desculpe-nos o transtorno.").serialize();
Acontece que a resposta não está setando o charset no Content-Type da resposta e o “não” está aparecendo com a codificação errada.
Teria algum modo de eu setar o charset?
Já tentei utilizar:
result.use(Results.http()).setStatusCode(500);
result.use(Results.http()).addHeader("Content-Type", "charset=ISO-8859-1");
result.use(Results.json()).from("Sua mensagem não pode ser enviada, desculpe-nos o transtorno.").serialize();
Mas não funciona, o Content-Type da resposta vem apenas com o application/json setado pelo VRaptor.
isso ou tentar descobrir qual é o charset da requisição… abre uma issue no github com isso por favor? (em inglês, se for possível) http://github.com/caelum/vraptor/issues
Pra não criar uma classe só pra fazer essa adapção e perder o padrão nos results,
poque desse modo todos os results estariam de acordo com o framework
e todas as que eu quero usar json eu teria que usar a classe criada.
Eu acabei baixando os fontes do VRaptor e criei o método com o terceiro parâmetro na interface Serialization e implementei os métodos nas classes XStreamJSONSerialization e XStreamXMLSerialization.
Nenhum segredo na implementação. Só adicionei o método exatamente como você me passou no XStreamJSONSerialization e com application/xml no XStreamXMLSerialization obviamente.
Não mechi na interfaze Serializer pois apenas o que eu fiz já satisfez a minha necessidade e por não ter certeza da implementação a usar nas classes que implementam Serializer.
No final das contas o seu uso não foge do padrão do framework e ficou assim:
Só não entendo por que fazer manual algo que você pode fazer “automagico”.
Quando vocẽ envia uma requisição json, nos headers é enviado qual o charset usado. Basta pega-lo e usar no response. Simples e sem precisar passar parametro manual.
Gostaria de adicionar algumas informações no tópico.
Por algum motivo bizarro meu IE8 não enviava o charcode, então ao invés de pegar do request sugiro fazerem isso na mão mesmo.
Exemplo: