SpringMvc Controller请求链接忽略大小写(包含拦截器)及@ResponseBody返回String中文乱码处理。。。

  1. @RequestMapping(value = "/tests", method = RequestMethod.POST)
  2. @ResponseBody
  3. public String tests(HttpServletRequest request){
  4. return "我是";
  5. }
  1.  
  2. 比如我们有这么个请求,返回的是“我是”这么一个中文字符串,请求链接是“/tests”,先处理返回中文乱码问题.
  3.  
  4. 1)我们一般会在springmvc启动配置文件中配置这么一段StringHttpMessageConverter的转换器,但即使是配置了也不管用:
      
  1. <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
  2. <context:component-scan base-package="com.web.controller" use-default-filters="false">
  3. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  4. </context:component-scan>
  5.  
  6. <aop:aspectj-autoproxy/>
  7.  
  8. <!-- 开启@controller注解,同时解决返回中文乱码问题 -->
  9. <mvc:annotation-driven>
  10. <mvc:message-converters>
  11. <!--<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>-->
  12. <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  13. <constructor-arg value="UTF-8"/>
  14. </bean>
  15. <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
  16. <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
  17. <property name="supportedMediaTypes">
  18. <list>
  19. <!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
  20. <value>text/html;charset=UTF-8</value>
  21. <value>application/json;charset=UTF-8</value>
  22. </list>
  23. </property>
  24. <property name="features">
  25. <list>
  26. <value>WriteMapNullValue</value>
  27. <value>DisableCircularReferenceDetect</value>
  28. </list>
  29. </property>
  30. </bean>
  31. </mvc:message-converters>
  32. </mvc:annotation-driven>

  请注意上面这段配置,是先扫包,后启用SpringMVC驱动器转换器的配置,这样配置返回json出现下载链接的问题是解决了,但是返回中文字符串乱码问题并没有解决,如何解决呢?很简单,讲扫包和驱动器的位置对调一下,配置如下即可:

  

  1. <!-- 开启@controller注解,同时解决返回中文乱码问题 -->
  2. <mvc:annotation-driven>
  3. <mvc:message-converters>
  4. <!--<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>-->
  5. <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  6. <constructor-arg value="UTF-8"/>
  7. </bean>
  8. <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
  9. <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
  10. <property name="supportedMediaTypes">
  11. <list>
  12. <!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
  13. <value>text/html;charset=UTF-8</value>
  14. <value>application/json;charset=UTF-8</value>
  15. </list>
  16. </property>
  17. <property name="features">
  18. <list>
  19. <value>WriteMapNullValue</value>
  20. <value>DisableCircularReferenceDetect</value>
  21. </list>
  22. </property>
  23. </bean>
  24. </mvc:message-converters>
  25. </mvc:annotation-driven>
  26.  
  27. <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
  28. <context:component-scan base-package="com.web.controller" use-default-filters="false">
  29. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  30. </context:component-scan>
  31.  
  32. <aop:aspectj-autoproxy/>

  2)Controller请求链接忽略大小写(拦截器)

    网上很多资料是这么配置的,加一个继承自

  1. WebMvcConfigurationSupport的转换类,它的作用是将所有@RequestMapping的请求均转换为小写,这样做请求问题是解决了,如上用http://localhost:8080/tets或者http://localhost:8080/Tests都能请求到,但是如果

配置了<mvc:interceptors>拦截器,拦截器是拦截不到的,拦截器就成了瞎子不起作用了,通常配置如下(这段配置拦截器不管用):

    

  1. @Configuration
  2. public class WebConfig extends WebMvcConfigurationSupport {
  3.  
  4. @Override
  5. public void configurePathMatch(PathMatchConfigurer configurer) {
  6. AntPathMatcher matcher = new AntPathMatcher();
  7. matcher.setCaseSensitive(false);
  8. configurer.setPathMatcher(matcher);
  9. }
  10. }

    正确的做法如下,继承自AntPathMatcher路径匹配:

   

  1. public class CaseInsensitivePathMatcher extends AntPathMatcher {
  2.  
  3. protected boolean doMatch(String pattern, String path, boolean fullMatch, Map uriTemplateVariables) {
  4. return super.doMatch(pattern.toLowerCase(), path.toLowerCase(), fullMatch, uriTemplateVariables);
  5. }
  6. }

    然后将这个类加入</mvc:annotation-driven>内,如下:

  1. <bean id="caseInsensitivePathMatcher" class="com.web.interceptor.CaseInsensitivePathMatcher"/>
  2. <mvc:annotation-driven>
  3. <mvc:message-converters>
  4. <!--<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>-->
  5. <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  6. <constructor-arg value="UTF-8"/>
  7. </bean>
  8. <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
  9. <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
  10. <property name="supportedMediaTypes">
  11. <list>
  12. <!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
  13. <value>text/html;charset=UTF-8</value>
  14. <value>application/json;charset=UTF-8</value>
  15. </list>
  16. </property>
  17. <property name="features">
  18. <list>
  19. <value>WriteMapNullValue</value>
  20. <value>DisableCircularReferenceDetect</value>
  21. </list>
  22. </property>
  23. </bean>
  24. </mvc:message-converters>
  25. <mvc:path-matching path-matcher="caseInsensitivePathMatcher"/>
  26. </mvc:annotation-driven>

所以,如上两个问题合起来配置如下:

  

  1. <!-- 开启@controller注解,同时解决返回中文乱码问题 -->
  2. <bean id="caseInsensitivePathMatcher" class="com.web.interceptor.CaseInsensitivePathMatcher"/>
  3. <mvc:annotation-driven>
  4. <mvc:message-converters>
  5. <!--<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>-->
  6. <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  7. <constructor-arg value="UTF-8"/>
  8. </bean>
  9. <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
  10. <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
  11. <property name="supportedMediaTypes">
  12. <list>
  13. <!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
  14. <value>text/html;charset=UTF-8</value>
  15. <value>application/json;charset=UTF-8</value>
  16. </list>
  17. </property>
  18. <property name="features">
  19. <list>
  20. <value>WriteMapNullValue</value>
  21. <value>DisableCircularReferenceDetect</value>
  22. </list>
  23. </property>
  24. </bean>
  25. </mvc:message-converters>
  26. <mvc:path-matching path-matcher="caseInsensitivePathMatcher"/>
  27. </mvc:annotation-driven>
  28.  
  29. <!--<mvc:annotation-driven>
  30.  
  31. </mvc:annotation-driven>-->
  32.  
  33. <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
  34. <context:component-scan base-package="com.web.controller" use-default-filters="false">
  35. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  36. </context:component-scan>
  37.  
  38. <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  39. <property name="locations">
  40. <list>
  41. <value>classpath*:properties/*.properties</value>
  42. </list>
  43. </property>
  44. <property name="fileEncoding" value="UTF-8" />
  45. <property name="ignoreUnresolvablePlaceholders" value="true" />
  46. </bean>
  47.  
  48. <aop:aspectj-autoproxy/>

SpringMvc Controller请求链接忽略大小写(包含拦截器)及@ResponseBody返回String中文乱码处理的更多相关文章

  1. SpringMVC 使用@ResponseBody返回json 中文乱码与返回实体类报错

    有时候我们发现接收的是中文,返回却是个?.这确实是个蛋疼的问题,Spring中解析字符串的转换器默认编码居然是ISO-8859-1 /** * Implementation of {@link Htt ...

  2. SpringMVC 使用@ResponseBody返回json 中文乱码

    这确实是个蛋疼的问题,Spring中解析字符串的转换器默认编码居然是ISO-8859-1 既然找到问题了,那就必须想办法改过来,不同版本的Spring好像方法还不一样,网上不少说的都是Spring3. ...

  3. SpringMVC的@ResponseBody返回JSON,中文乱码问题的解决.

    SpringMVC的@ResponseBody,返回json,如果有中文显示乱码的解决办法. 在SpringMVC的配置文件中 <bean class="org.springframe ...

  4. SpringMVC(四)-- 文件下载、自定义拦截器、异常处理

    1.文件下载 用ResponseEntity<byte[]> 返回值完成文件下载 具体参见本博客之前的<文件上传下载> @RequestMapping(value=" ...

  5. SpringMVC拦截器和@ResponseBody注解冲突

    在使用@ResponseBody注解后controller方法只会返回ModelandView对象的数据模型,不会返回视图,这样有很多好处,但是如果在拦截器中进行了页面转发,在满足页面转发条件时,不会 ...

  6. 如何解决http请求返回结果中文乱码

    如何解决http请求返回结果中文乱码 1.问题描述 http请求中,请求的结果集中包含中文,最终以乱码展示. 2.问题的本质 乱码的本质是服务端返回的字符集编码与客户端的编码方式不一致. 场景的如服务 ...

  7. 解决springmvc使用ResponseBody注解返回json中文乱码问题

    spring版本:4.2.5.RELEASE 查看“org.springframework.http.converter.StringHttpMessageConverter”源码,中有一段说明: B ...

  8. springmvc学习笔记二:重定向,拦截器,参数绑定

    Controller方法返回值 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view. 返回void 在Contro ...

  9. SpringMVC框架学习笔记(6)——拦截器

    SpringMVC拦截器需要实现接口HandlerInterceptor 有3个方法,分别在请求处理前.请求处理后和在DispatcherServlet处理后执行 实现代码: package inte ...

随机推荐

  1. CSS复合选择器

    复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的,目的是为了可以选择更准确更精细的目标元素标签. 交集选择器 交集选择器由两个选择器构成,其中第一个为标签选择器,第二个为class选择器, ...

  2. 洛谷 P1149 火柴棒等式

    嗯....   这道题好讨厌啊!!!!   一开始莫名RE,然后发现数组小了,然后发现后面几个点总是WA,原来推的少了....   并且这道题的思路真的好水啊!!   先看一下题: 题目描述 给你n根 ...

  3. nginx关闭默认站点/空主机头(禁止IP直接访问、防止域名恶意解析)

    监控时做了负载均衡,所以只能让nginx指定域名访问,那我们就可以防止因为域名不对跳到默认的页面去. curl  -I   -H  “host:域名”   --include   https://19 ...

  4. elasticsearch head 连接不到elasticsearch

    配置好head后看到没有正常连接到elasticsearch.  重启后效果:

  5. Android中include标签的使用(打开引用布局,隐藏当前布局)

    在开发app的时候,有时候一个布局会反复用到,可以把反复用到的布局单独写一个xml文件,什么时候用到就用includ标签引入xml 下面是我写的反复用到的一个xml,里面有2个button,一个Tex ...

  6. 可持久化Treap 赛前摸鱼笔记

    1.基本结构 随机化工具 unsigned int SEED = 19260817; //+1s inline int Rand(){ SEED=SEED*1103515245+12345; retu ...

  7. HDU - 1085 母函数

    年轻人的第一道母函数入门题 #include<bits/stdc++.h> using namespace std; const int maxn = 1000+2000+5000+1; ...

  8. springboot(七)-系列功能配置

    热部署 我们程序员在开发web项目的时候,避免不了需要将项目放到tomcat或者其他web容器中运行测试,而所有的程序员都有个习惯,从来都是以debug模式启动的(就好像谁不是这样启动就不是优秀的程序 ...

  9. filezilla绑定编辑器

    编辑  - >设置 ->文件格式关联 ->输入需要关联的编辑器的路径

  10. Oracle KEEP的用法

    [摘录自] http://blog.itpub.net/12932950/viewspace-687036/ http://flyfx.iteye.com/blog/1994993 聚合函数MIN, ...