博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPRING3.X JSON 406 和 中文乱码问题
阅读量:6982 次
发布时间:2019-06-27

本文共 2323 字,大约阅读时间需要 7 分钟。

hot3.png

简要

最近使用Spring3.2.3 版本  在使用 JSON message  convertion 的时候,老是出现406 返回类型不匹配的问题,去网上google 了一番 也没有一个明确的说法,只能自己去调试。

Maven 依赖

com.fasterxml.jackson.core
jackson-annotations
2.1.0
jar
compile
com.fasterxml.jackson.core
jackson-databind
2.1.0
jar
compile
com.fasterxml.jackson.core
jackson-core
2.1.0
jar
compile

message convertor XML 配置

使用jackson2.X 版本。

调试过程

关键代码主要在于查找能够处理 请求要求的返回值类型的 message convertion.

/*关键类*/org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver
/*方法*/protected 
void writeWithMessageConverters(..)

筛选能够处理的返回值类型

List
requestedMediaTypes = getAcceptableMediaTypes(servletRequest);List
producibleMediaTypes = getProducibleMediaTypes(servletRequest, returnValueClass);
请求的Accept-type  'application/json ...' (记忆不全了)

调试发现 producibleMediaTypes 竟然为空, 导致执行以下代码

if (compatibleMediaTypes.isEmpty()) {			throw new HttpMediaTypeNotAcceptableException(producibleMediaTypes);}
抛出了406 错误。

排查发现方法

getProducibleMediaTypes(..)
messageConverters 只有spring 默认的messageConvertor, 定义的JSON 转换未生效,
我就猜测是XML 配置文件出了问题

spring 默认的messageConvertor 列表

  • ByteArrayHttpMessageConverter
    converts byte arrays
    StringHttpMessageConverter
    converts strings.
    FormHttpMessageConverter
    converts form data to/from a MultiValueMap<String, String>.
    SourceHttpMessageConverter
    converts to/from a javax.xml.transform.Source.

后来检查发现 我在spring-mvc 配置文件中又配置了

...

用于全局的PropertyEditor

------------------------------------------------------------------------------------------------------------------

其实这里就发生冲突了, 在 <mvc:annotation-driven /> 是包含了该配置的。 spring 其他地方也有很多这样的设计。

修改如下配置

                            
text/plain;charset=UTF-8
这样 JSON 的支持问题就解决了, string 的乱码问题也顺带解决下。

转载于:https://my.oschina.net/u/1156053/blog/161053

你可能感兴趣的文章
several useful Store Procedures in MSSQL
查看>>
对半搜索
查看>>
关于移动端弹窗内容滑动底部页面不滑动的问题
查看>>
游戏2048源代码
查看>>
TOJ3039: 材质贴图
查看>>
基于FPGA的VGA显示静态图片
查看>>
shell之脚本练习
查看>>
版本控制git之五-标签管理 tags 标签 代码版本 如: v1.0
查看>>
分享Silverlight/WPF/Windows Phone一周学习导读(1月9日-1月16日)
查看>>
rsync生产排错FAQ整理16
查看>>
Ruby和SHELL中如何遍历指定目录的文件
查看>>
NSLocalizedString 实现国际化
查看>>
迎接“云”时代的全面到来
查看>>
梭子鱼邮件归档设备配置
查看>>
论“性能需求分析”系列专题(一)之 性能需求剖析
查看>>
oracle删除一个用户
查看>>
VR與AI的激情相遇
查看>>
CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)
查看>>
排错之网络映射缓存凭证记录导致备份计划任务失败
查看>>
[Selenium] 基本使用
查看>>