Maison  >  Questions et réponses  >  le corps du texte

java - springmvc接收url中文参数乱码

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中文网2742 Il y a quelques jours421

répondre à tous(9)je répondrai

  • 天蓬老师

    天蓬老师2017-04-17 18:01:59

    大部分解决方式楼上都已经讲得比较清楚了。我把3种方式整理一下吧

    1. Tomcat 可以直接配置URIEconding="UTF-8"

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

    3. 将中文使用URLEncoder编码如:baidu.com/s?wd=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C

    这3种方式都可以解决中文URL乱码问题。

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-17 18:01:59

    get提交用 string类的构造方法

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-17 18:01:59

    有没有debug下看后台接收到的数据是乱码?还是到数据库乱码了?两者是不同的情况,前者可以尝试request.setCharacterEncoding方法,并且用new String(para.getBytes(“ISO-8859-1”),“UTF-8”对参数进行转码试试,如果看到后台的不是乱码,到数据库乱码那就看数据库链接上是不是忘了加enConding…

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-17 18:01:59

    我的做法是

    封装到一个对象里,然后用@RequestBody 来注解这个参数,然后从对象里get出来,但是有时候参数很少的时候,再去封装一个对象,感觉多此一举

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-17 18:01:59

    springmvc中文乱码问题:http://luanxiyuan.iteye.com/blog/1849169
    new String(接收到的参数.getBytes("ISO-8859-1"), "UTF-8");

    répondre
    0
  • 怪我咯

    怪我咯2017-04-17 18:01:59

    容器的字符集指定了吗

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-17 18:01:59

    如果是 tomcat 容器的话,请配置 URIEconding="UTF-8" useBodyEncodingForURI="true"

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

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-17 18:01:59

    可以在前端用Base64编码后传到后台解码

    répondre
    0
  • 迷茫

    迷茫2017-04-17 18:01:59

    @RequestMapping(value = "/xxx", method = RequestMethod.GET, headers = {"content-type=application/json;charset=UTF-8"}, produces = {"application/json;charset=UTF-8"})

    répondre
    0
  • Annulerrépondre