java - springmvc接收url中文参数乱码
PHP中文网
PHP中文网 2017-04-17 17:59:59
0
9
440

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>
PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(9)
Peter_Zhu

Kebanyakan penyelesaian telah dijelaskan dengan jelas di atas. Biar saya selesaikan 3 cara

  1. Tomcat boleh dikonfigurasikan terusURIEconding="UTF-8"

  2. new String("中文".getBytes("ISO-8859-1"), "UTF-8");

  3. 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 gunakan new 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

Enkapsulasi ke dalam objek, kemudian gunakan @RequestBody untuk menganotasi parameter, dan kemudian dapatkannya daripada objek Namun, kadangkala apabila terdapat sedikit parameter, rasanya tidak perlu untuk merangkum objek sekali lagi

<.>
左手右手慢动作

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?

Ty80

Jika ia adalah bekas tomcat, sila konfigurasikan URIEconding="UTF-8" useBodyEncodingForURI="true"

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" URIEconding="UTF-8" useBodyEncodingForURI="true"
               redirectPort="8443" />
Peter_Zhu

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"})

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan