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


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

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


背景

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

问题

然后问题它就来了。。因为本来想偷懒,所以这里我定义的实体一开始是这样子的:

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

然后找原因找了好久,百度上查了。。。。又上stackoverflow上查。。。。。。。。,然后问了身边的大佬,终于找到了!


解决

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

2、请求的参数属性也做出相应的改变

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

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