SpringMVC使用Get方式传参,返回值出现菱形问号(��ӳɹ�)乱码,解决方法。

  背景:

  一个简单的Controller类,返回结果直接写死了,跟传的参数没关系

@Controller
@RequestMapping("/article")
public class ArticleController {

    @Autowired
    private ArticleService articleService;
    
    @RequestMapping("/add")
    @ResponseBody
    public Result add(Article article) {
        try {
            articleService.add(article);
            return new Result("添加成功!");
        } catch (Exception e) {
            return new Result("500","添加失败"+e);
        }
    }
}

  web.xml,该部分配置放在web.xml的最上面

<!-- 从页面post传值到controller时汉字出现问号,注意拦截的顺序,放在web.xml里面的最上面 -->
    <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>

  spring-mvc.xml

 <mvc:annotation-driven>
        <mvc:message-converters><!-- 解决字符串从Controller传递到页面汉字显示问号 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg ref="utf8Charset" />
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    
    <bean id="utf8Charset" class="java.nio.charset.Charset" factory-method="forName">
        <constructor-arg value="UTF-8" />
    </bean>

  使用maven的tomcat7插件,启动项目。

  浏览器中输入:http://localhost:8080/spring-web-mybatics/article/add?title=你好&classify=1&content=测试测试测试

  返回结果的汉字:“添加成功!变为:”��ӳɹ�

  解决方法:

  把项目的编码改成UTF-8,重新编译、启动即可。

  后来想截图,再把UTF-8改为GBK,问题居然没有复现。。。

 

posted @ 2020-04-24 11:27  雷雨客  阅读(944)  评论(0编辑  收藏  举报