zoukankan      html  css  js  c++  java
  • 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风格的,所以提供这个接口的服务估计也是一个比较有历史的项目了。

  • 相关阅读:
    linux_批量关闭进程
    latex_引用参考文献格式,引用多篇参考文献
    vue跨域解决方法
    vue点击返回顶部插件vue-totop
    百度分享vue版-vshare
    vue项目引入社交分享插件
    vshare
    vue分享插件
    EFCore使用SQL语句
    JDBC Request :Cannot load JDBC driver class 'com.mysql.jdbc.Driver'解决办法
  • 原文地址:https://www.cnblogs.com/kuangdw/p/12926693.html
Copyright © 2011-2022 走看看