Estou tendo no meu aplicativo da web Spring MVC Java acionado por anotações executado no servidor da web jetty (atualmente no plugin maven jetty).
Estou tentando fazer algum suporte AJAX com um método de controlador retornando apenas o texto de ajuda da String. Os recursos estão na codificação UTF-8 e a string também, mas minha resposta do servidor vem com
content-encoding: text/plain;charset=ISO-8859-1
mesmo quando meu navegador envia
Accept-Charset windows-1250,utf-8;q=0.7,*;q=0.7
Eu estou usando alguma configuração padrão de primavera
Encontrei uma dica para adicionar esse bean à configuração, mas acho que ele não é usado, porque diz que não suporta a codificação e que é usada uma padrão.
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
</bean>
Meu código de controlador é (observe que essa alteração no tipo de resposta não está funcionando para mim):
@RequestMapping(value = "ajax/gethelp")
public @ResponseBody String handleGetHelp(Locale loc, String code, HttpServletResponse response) {
log.debug("Getting help for code: " + code);
response.setContentType("text/plain;charset=UTF-8");
String help = messageSource.getMessage(code, null, loc);
log.debug("Help is: " + help);
return help;
}
DispatcherServlet
's config (...-servlet.xml
)Encontrei solução para o Spring 3.1. com o uso da anotação @ResponseBody. Aqui está um exemplo de controlador usando saída Json:
fonte
<mvc:annotation-driven/>
no applicationContext. (Em vez de<bean class=" [...] DefaultAnnotationHandlerMapping"/>
, que está obsoleta na Primavera 3.2 de qualquer maneira ...)produces
atributo.MediaType.APPLICATION_JSON_UTF8_VALUE
.Observe que no Spring MVC 3.1 você pode usar o namespace MVC para configurar conversores de mensagens:
Ou configuração baseada em código:
fonte
Accept-Charset
cabeçalho que provavelmente lista todas as codificações de caracteres conhecidas e 2) quando a solicitação possui umAccept
cabeçalho, asupportedMediaTypes
propriedade do conversor não é usada , por exemplo, quando faço a digitação da solicitação diretamente a URL em um navegador, a resposta possui umContent-Type: text/html
cabeçalho.<bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /></bean>
Caso você também possa definir a codificação da seguinte maneira:
Eu acho que usar StringHttpMessageConverter é melhor que isso.
fonte
the manifest may not be valid or the file could not be opened.
no IE 11. Obrigado digz!você pode adicionar produz = "text / plain; charset = UTF-8" ao RequestMapping
veja este blog para mais detalhes
fonte
Eu estava enfrentando esse problema recentemente e encontrei uma resposta muito melhor disponível no Spring 3.1:
Portanto, tão fácil quanto o JAX-RS, como todos os comentários indicaram, poderia / deveria ser.
fonte
produces
diz: "... solicitação mapeada apenas se o Tipo de conteúdo corresponder a um desses tipos de mídia". o que significa que o AFAIKproduces
é relevante para saber se o método corresponde a uma solicitação e não como que tipo de conteúdo a resposta deve ter.Você pode usar produz para indicar o tipo de resposta que está enviando do controlador. Essa palavra-chave "produz" será mais útil na solicitação do ajax e foi muito útil no meu projeto
fonte
Obrigado digz6666, sua solução funciona para mim com pequenas alterações porque estou usando json:
A resposta dada por axtavt (que você recomendou) não funcionará para mim. Mesmo se eu adicionei o tipo de mídia correto:
fonte
Defino o tipo de conteúdo no MarshallingView no bean ContentNegotiatingViewResolver . Funciona com facilidade, limpeza e suavidade:
fonte
Estou usando o CharacterEncodingFilter, configurado em web.xml. Talvez isso ajude.
fonte
forceEncoding=true
ele filtra a resposta também, mas não ajudaria neste caso.forceEncoding=false
. Acabei de defini-lofalse
e "charset = UTF-8" foi adicionado com sucesso aoContent-Type
cabeçalho.se nenhuma das opções acima funcionou para você tentar fazer solicitações de ajax no "POST" e não no "GET", funcionou muito bem para mim ... nenhuma das opções acima funcionou. Eu também tenho o characterEncodingFilter.
fonte
Depois de ter tentado muitas soluções alternativas para esse problema. Pensei nisso e funciona bem.
fonte
A maneira simples de resolver esse problema no Spring 3.1.1 é: adicione os seguintes códigos de configuração em
servlet-context.xml
Não precisa substituir ou implementar nada.
fonte
se você decidir corrigir esse problema através da seguinte configuração:
você deve confirmar que deve haver apenas uma tag controlada por anotação mvc: em todo o seu arquivo * .xml. caso contrário, a configuração pode não ser eficaz.
fonte
De acordo com o link "Se uma codificação de caracteres não for especificada, a especificação Servlet exige que uma codificação ISO-8859-1 seja usada". Se você estiver usando o Spring 3.1 ou posterior, use a seguinte configuração para definir charset = UTF-8 para corpo da resposta
@RequestMapping (value = "sua URL de mapeamento", produz = "text / plain; charset = UTF-8")
fonte
Configuração de amostra:
fonte