背景:发送post请求,且body为json串时,response响应值总是提示“XX字段值不能为空”,采用Postman、jmeter工具尝试,结果都是如此,但Postman、jmeter采用提交的内容类型为application/x-www-form-urlencod,服务器却可以解析,也能成功返回正确数据,只能猜想是header问题所致,于是请求开发帮助,在代码里面,加入打印request和response日志,再通过soapui重新发送json串,发现请求参数中,json串键和键值都为空,而且偶尔还出现,将整个json串当做一个键值,故分析是服务器不支持解析json串提交的内容类型问题所致。
原因:通过抓包和分析请求中header信息,以及与开发了解代码解析代码原理,发现http协议默认提交的内容类型为application/x-www-form-urlencod,故发送json串,服务器是无法解析。
解决方法:让开发修改代码,兼容json提交的内容类型“application/json”后,返回soapui工具,选择request请求,将body中Media Type,选择或输入“application/json”类型,再输入符合json格式的json串 ,再执行请求,就可以成功看到服务器response回来的值。
备注:
1、此问题原因和解决方法,与我另外一篇博客思路差不多,地址:http://blog.csdn.net/zouxiongqqq/article/details/51718437
2、了解原理后,顺便解决了soapui发送post请求,提交的内容类型为application/x-www-form-urlencod时,body内容应采用如何方式提交问题,方法:在soapui request请求的body中,将Media Type中选择或输入“application/x-www-form-urlencod”,再输入参数和值(比如:loginname=test&password=123456) ,再执行即可。
3、其他工具要支持json格式发送请求,与方法1雷同。
4、若其他工具中body,采用其他提交的内容类型(比如:text/xml、multipart/form-data等)发送请求,一定要记住服务器是否支持提交的内容类型,以及body内容对应编写方式,否则无法解析。