博主在调试一个接口时,后台收到的json格式如下
{
head:'一些报文头内容'
body:'{报文体}'
}
具体业务情景是:
由于接口报文有统一的格式,具体的请求报文需要放到json字符串的一个值中(如上示例,整个请求报文需要放到body中);博主再调试接口时碰到需要将一个js对象转换为json字符串,直接使用JSON.stringify(obj)后,对象被转换为字符串,发送到后台后就会出现如上的报文结构,导致解析具体报文体时失败。
后台报错如下:
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.entities.xxx no String-argument constructor/factory method to deserialize from String value xxxxxxx
注: 如果后台报如上错误,可能是接收的json报文格式错误
** 报错原因:由于body中的json对象值被单引号包围,所以后台解析时把body中的值当作了字符串不能解析为实体对象**
解决方法:,前台在发送报文时,可以先把body中的值转换为json字符串,然后再转换为json对象。
示例如下:
{
head:'一些报文头内容'
body:eval('(' + JSON.stringify(obj) + ')')
}