SpringMCV @ResponseBody 返回乱码问题

@ResponseBody 将内容或对象作为 HTTP 响应正文返回,使用@ResponseBody将会跳过视图处理部分,而是调用适合HttpMessageConverter,将返回值写入输出流。


开启了之后它给AnnotationMethodHandlerAdapter
初始化 7个转换器,

可以通过调用AnnotationMethodHandlerAdapter类的getMessageConverts()
方法来获取转换器的一个集合 List

默认给AnnotationMethodHandlerAdapter初始化的有(当然我们也可以添加自定义的converter)

ByteArrayHttpMessageConverter
StringHttpMessageConverter
ResourceHttpMessageConverter
SourceHttpMessageConverter
XmlAwareFormHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
MappingJacksonHttpMessageConverter

客户端的请求header中寻找客户端可接收的类型

  • StringHttpMessageConverter
    支持String , Accept所有类型

  • MappingJacksonHttpMessageConverter
    支持Map List 实体对象等等 ,Accept:application/json

解决办法

spring-mvc-3.0(包括)之前下面不包含任何子元素


   
       
          
               
                text/html;charset=UTF-8  
               
         
     
     
       
          
              text/html;charset=UTF-8
          
       
      
    

MappingJackson2HttpMessageConverter 可以替换FastJsonHttpMessageConverter代替

  
          
              
                application/json;charset=UTF-8  
                text/html;charset=UTF-8  
              
          
          
              
                  
                QuoteFieldNames  
                WriteDateUseDateFormat  
              
          
      

spring-mvc

  1. spring-mvc-3.1.xsd annotation-driven
xsd:element name="annotation-driven">
...
    
      
          ...
          ...
          ...
      
      ...
      ...
      ...
      ...
    

  1. spring-mvc-3.0.xsd annotation-driven

...
  
    ...
    ...        
  

XSD元素
XSD属性
指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次
指示器可规定某个元素可出现的最大次数:
指示器可规定某个元素能够出现的最小次数:

最常用的类型是:type

xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time

你可能感兴趣的:(SpringMCV @ResponseBody 返回乱码问题)