Controller方法中使用@RequestBody接收到的值为空?

记一次使用@RequestBody收到的对象中的属性值为null的问题

咱们在使用springMVC或是springboot开发中,controller类的方法中常常须要用到@RequestBody来直接将前端传来的json字符串变成一个咱们要的对象,以方便后面的业务逻辑处理。然而,因为一次特殊的逻辑需求,踩了@RequestBody的一个坑,因此这里分享一下,但愿能给一样采坑的你给予必定参考。前端


背景

在一次项目中,有这样一个场景:个人服务须要暴露一个接口供前端掉用,拿到前端传过来的数据以后,我须要使用HttpClient去掉另外的HTTP接口(而这里的调用入参字段差很少就是我从前端拿到的那几个字段)。可是这个我要在代码中调用的HTTP接口的入参的每一个字段必须是大写的,相似下图的样子(好像由于别人提供的这个接口不是REST风格的,而是XML的),因此我就干脆让我暴露的接口直接也接收大写的参数字段算了,省得转来转去的怪麻烦(结果代表偷懒失败。。。)spring

问题

而后问题它就来了。。由于原本想偷懒,因此这里我定义的实体一开始是这样子的:json

这个时候使用上面的post请求到controller的时候,发现@RequestBody后面的实体对象中的属性全都是null(主要是彻底不报错)springboot

而后找缘由找了很久,百度上查了。。。。又上stackoverflow上查。。。。。。。。,而后问了身边的大佬,终于找到了!post


解决

这里我就不BB了,直接贴图为快
一、将定义的实体的属性改为规范的命名对象

二、请求的参数属性也作出相应的改变blog

三、controller中打断点再看看发现值已经成功拿到了接口

因此最终我仍是须要将受到的字段属性转换成大写命名的参数属性,而后再将它们做为入参传入到使用HttpClient调用的那个接口去请求别的服务提供的远程HTTP接口。
所以最终偷懒失败,估计那个远程HTTP接口使用的仍是那种老的XML风格的,因此提供这个接口的服务估计也是一个比较有历史的项目了。开发

相关文章
相关标签/搜索