1.今天在做一个例子的时候,发现后台不能正确接收中文的url参数,试了各种解决办法都不可以。
以下是代码:
Controller:
package com.springapp.mvc;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String printWelcome(ModelMap model) {
model.addAttribute("message", "Hello world IDEA!");
model.put("content","This is my first springmvc web");
return "index";
}
@RequestMapping(value = "/page/{name}/{age}",method = RequestMethod.GET)
public String getName(ModelMap modelMap, @PathVariable("name") String name, @PathVariable("age") int age) {
modelMap.addAttribute("name",name);
modelMap.addAttribute("age",age);
return "name";
}
}
name.jsp
<%@ page pageEncoding="UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<p>
名字:${name}<br/>
年龄:${age}<br/>
</p>
</body>
</html>
web.xml
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Encoding -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Most of the solutions have been explained clearly above. Let me sort it out in 3 ways
Tomcat can be configured directly
URIEconding="UTF-8"
new String("中文".getBytes("ISO-8859-1"), "UTF-8");
Use
URLEncoder
encoding in Chinese like: baidu.com/s?wd=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8CThese 3 methods can solve the problem of garbled Chinese URLs.
Get submission uses the constructor method of string class
Have you debugged it to see if the data received in the background is garbled? Or is the database garbled? The two are different situations. For the former, you can try to transcode the parameters. If you see that the background code is not garbled and the database is garbled, then check whether you forgot to add enConding on the database link...
request.setCharacterEncoding
方法,并且用new String(para.getBytes(“ISO-8859-1”),“UTF-8”
My approach is
springmvc Chinese garbled problem: http://luanxiyuan.iteye.com/blog/1849169
new String(received parameters.getBytes("ISO-8859-1"), "UTF-8");
Has the character set of the container been specified?
If it is a tomcat container, please configure it
URIEconding="UTF-8" useBodyEncodingForURI="true"
You can use Base64 encoding on the front end and then send it to the backend for decoding
@RequestMapping(value = "/xxx", method = RequestMethod.GET, headers = {"content-type=application/json;charset=UTF-8"}, produces = {"application/json;charset=UTF-8"})