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>
Kebanyakan penyelesaian telah dijelaskan dengan jelas di atas. Biar saya selesaikan 3 cara
Tomcat boleh dikonfigurasikan terus
URIEconding="UTF-8"
new String("中文".getBytes("ISO-8859-1"), "UTF-8");
Enkodkan bahasa Cina menggunakan
URLEncoder
seperti: baidu.com/s?wd=你好世界Tiga kaedah ini boleh menyelesaikan masalah URL Cina yang bercelaru.
Dapatkan penyerahan menggunakan kaedah pembina kelas rentetan
Adakah anda menyahpenyahnya untuk melihat sama ada data yang diterima di latar belakang bercelaru? Atau adakah pangkalan data bercelaru? Kedua-duanya adalah situasi yang berbeza untuk yang pertama, anda boleh mencuba kaedah
request.setCharacterEncoding
dan gunakannew String(para.getBytes(“ISO-8859-1”),“UTF-8”
untuk mengubah kod parameter Jika anda melihat bahawa kod latar belakang tidak bercelaru dan pangkalan data bercelaru, kemudian semak sama ada anda terlupa tambahkannya pada pautan pangkalan data enConding…Pendekatan saya ialah
masalah kacau springmvc Cina: http://luanxiyuan.iteye.com/blog/1849169
Rentetan baharu(parameter yang diterima.getBytes("ISO-8859-1"), "UTF-8"); >
Adakah set aksara bekas telah ditentukan?
Jika ia adalah bekas tomcat, sila konfigurasikan
URIEconding="UTF-8" useBodyEncodingForURI="true"
Anda boleh menggunakan pengekodan Base64 di bahagian hadapan dan kemudian menghantarnya ke bahagian belakang untuk penyahkodan
@RequestMapping(value = "/xxx", method = RequestMethod.GET, headers = {"content-type=application/json;charset=UTF-8"}, menghasilkan = {"application/json;charset=UTF -8"})