java - springmvc接收url中文参数乱码
PHP中文网
PHP中文网 2017-04-17 17:59:59
[Java讨论组]

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" %>


    


    

名字:${name}
年龄:${age}

web.xml



    Spring MVC Application

    
        mvc-dispatcher
        org.springframework.web.servlet.DispatcherServlet
        1
    

    
        mvc-dispatcher
        /
    

    
    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceEncoding
            true
        
    
    
        characterEncodingFilter
        /*
    

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(7)
天蓬老师

大部分解决方式楼上都已经讲得比较清楚了。我把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乱码问题。

大家讲道理

get提交用 string类的构造方法

巴扎黑

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

大家讲道理

我的做法是

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

怪我咯

容器的字符集指定了吗

天蓬老师

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

迷茫

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号