Je demande à mon URL d'envoyer une requête Ajax comme celle-ci:
url += '/' + something + '/' + id;
var response;
$.ajax({
async : false,
type: 'DELETE',
url: url,
...
Ma removeId
est une variable qui inclut le caractère UTF-8. Je vais gérer cette variable du côté Java comme ça:
@RequestMapping(value = "/something/{id}", method = RequestMethod.DELETE)
public void myMethod(HttpServletResponse response, @PathVariable String id) {
...
Cependant, la variable id
du côté de Java est différente de celle d'origine car les caractères UTF-8 deviennent des éléments étranges.
Comment puis-je envoyer des caractères UTF-8 à partir de JavaScript et les transformer à nouveau de mon côté Java (Spring 3 avec REST, mon serveur Web est Tomcat 7)?
PS 1: Même si je n'utilise pas encodeUriComponent
, il semble que mon URL soit codée par elle-même?
PS 2: Pour clarifier la question:
i.e. my id variable is araç and sent URL is: localhost:8080/sdfasf/ara%C3%A7
Quand je vois cette variable id a cette valeur:
araç
au lieu de:
ara%C3%A7
Spring (ou Tomcat) le fait-il automatiquement? Est-il possible de le décoder automatiquement quand il s'agit de controller en tant que variable de chemin (je veux dire sans écrire quoi que ce soit comme:
URLDecoder.decode(id,"UTF-8");
il sera converti automatiquement)
La valeur id que vous voyez semble être décodée en utilisant le jeu de caractères iso-8859-1 au lieu de utf-8. Le codage de la partie chemin d'une URL n'est pas spécifié dans Java EE et il n'y a pas d'api standard pour le définir. Pour les paramètres de requête, vous pouvez utiliser request.setCharacterEncoding avant d'accéder à des paramètres pour les décoder correctement. La CharacterEncodingFilter
fait exactement cela mais n’a aucune influence sur les paramètres de chemin.
Pour que cela fonctionne dans Tomcat, vous devez définir l'attribut URIEncoding
de l'élément Connector
dans son server.xml
sur "utf-8".
Vous trouverez tout ce que vous avez toujours voulu savoir sur le codage de caractères dans une application Web Java dans cette excellente réponse à une question similaire.
J'ai trouvé la réponse ici: http://forum.springsource.org/showthread.php?14063-How-to-set-setCharacterEncoding-on-Request
J'ai fait cette configuration à mon côté de printemps:
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
et cela fonctionne très bien pour UTF-8.
Avez-vous essayé de définir le codage de page sur la page où vous intégrez le javascript?
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
Assurez-vous que le codage de page est défini sur UTF-8 en ajoutant ce droit sous la balise <head>
de départ:
<meta charset="utf-8">
Assurez-vous également que le fichier JavaScript est enregistré avec le codage UTF-8. Vérifiez vos paramètres d'éditeur de texte.
En utilisation JavaScript:
data=encodeURIComponent(data);
pour encoder des données, et en Java vous pouvez faire:
data=Java.net.URLDecoder.decode(data);