J'ai dans mon application Web Spring MVC Java pilotée par Annotation exécutée sur le serveur Web de la jetée (actuellement dans le plugin maven jetty).
J'essaie de prendre en charge AJAX avec une méthode de contrôleur renvoyant uniquement le texte d'aide String. Les ressources sont en codage UTF-8, tout comme la chaîne, mais ma réponse du serveur est fournie avec
content-encoding: text/plain;charset=ISO-8859-1
même quand mon navigateur envoie
Accept-Charset windows-1250,utf-8;q=0.7,*;q=0.7
J'utilise en quelque sorte la configuration par défaut du printemps
J'ai trouvé un indice pour ajouter ce bean à la configuration, mais je pense qu'il n'est tout simplement pas utilisé, car il indique qu'il ne prend pas en charge l'encodage et qu'un par défaut est utilisé à la place.
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
</bean>
Mon code de contrôleur est (notez que ce changement de type de réponse ne fonctionne pas pour moi):
@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
)J'ai trouvé une solution pour Spring 3.1. avec l'utilisation de l'annotation @ResponseBody. Voici un exemple de contrôleur utilisant la sortie Json:
la source
<mvc:annotation-driven/>
dans applicationContext. (Au lieu de<bean class=" [...] DefaultAnnotationHandlerMapping"/>
, qui est de toute façon obsolète au printemps 3.2 ...)produces
attribut.MediaType.APPLICATION_JSON_UTF8_VALUE
.Notez que dans Spring MVC 3.1, vous pouvez utiliser l'espace de noms MVC pour configurer les convertisseurs de messages:
Ou configuration basée sur le code:
la source
Accept-Charset
tête qui répertorie probablement tous les encodages de caractères connus, et 2) lorsque la requête a un en-Accept
tête lasupportedMediaTypes
propriété du convertisseur n'est pas utilisée , donc par exemple lorsque je fais la requête en tapant directement l'URL dans un navigateur, la réponse a un en-Content-Type: text/html
tête à la place.<bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /></bean>
Juste au cas où vous pouvez également définir l'encodage de la manière suivante:
Je pense que l'utilisation de StringHttpMessageConverter est meilleure que cela.
la source
the manifest may not be valid or the file could not be opened.
dans IE 11. Merci digz!vous pouvez ajouter produit = "text / plain; charset = UTF-8" à RequestMapping
voir ce blog pour plus de détails
la source
Je combattais ce problème récemment et j'ai trouvé une bien meilleure réponse disponible au printemps 3.1:
Donc, aussi simple que JAX-RS, comme tous les commentaires l'ont indiqué, cela pourrait / devrait être.
la source
produces
dit: "... la requête n'est mappée que si le Content-Type correspond à l'un de ces types de média." ce qui signifie AFAIK que leproduces
est pertinent pour savoir si la méthode correspond à une demande et non comment quel type de contenu la réponse devrait avoir.Vous pouvez utiliser produits pour indiquer le type de réponse que vous envoyez depuis le contrôleur. Ce mot-clé "produit" sera plus utile dans la requête ajax et a été très utile dans mon projet
la source
Merci digz6666, votre solution fonctionne pour moi avec de légères modifications car j'utilise json:
La réponse donnée par axtavt (que vous avez recommandé) ne fonctionnera pas pour moi. Même si j'ai ajouté le bon type de média:
la source
J'ai défini le type de contenu dans MarshallingView dans le bean ContentNegotifyingViewResolver . Cela fonctionne facilement, propre et en douceur:
la source
J'utilise le CharacterEncodingFilter, configuré dans web.xml. Peut-être que cela aide.
la source
forceEncoding=true
ça filtre aussi la réponse, mais ça n'aiderait pas dans ce cas.forceEncoding=false
. Je viens de le définirfalse
et "charset = UTF-8" est ajouté avec succès à l'en-Content-Type
tête.si rien de ce qui précède n'a fonctionné pour vous, essayez de faire des requêtes ajax sur "POST" et non sur "GET", cela a bien fonctionné pour moi ... rien de ce qui précède n'a fonctionné. J'ai aussi le characterEncodingFilter.
la source
Après avoir essayé beaucoup de solutions de contournement pour ce problème ... J'ai pensé à cela et cela fonctionne bien.
la source
Le moyen simple de résoudre ce problème dans Spring 3.1.1 est le suivant: ajoutez les codes de configuration suivants dans
servlet-context.xml
Pas besoin de remplacer ou de mettre en œuvre quoi que ce soit.
la source
si vous décidez de résoudre ce problème via la configuration suivante:
vous devez confirmer qu'il ne devrait y avoir qu'une seule balise mvc: basée sur les annotations dans tout votre fichier * .xml. sinon, la configuration risque de ne pas être efficace.
la source
Selon le lien "Si un codage de caractères n'est pas spécifié, la spécification de servlet exige qu'un codage ISO-8859-1 soit utilisé". Si vous utilisez le printemps 3.1 ou une version ultérieure, utilisez la configuration de jachère pour définir charset = UTF-8 sur corps de la réponse
@RequestMapping (valeur = "votre url de mappage", produit = "text / plain; charset = UTF-8")
la source
Exemple de configuration:
la source