• spring中使用@RequestBody 接收到的对象值为空


    第一次使用java开发项目,涉及到的技术有 Dubbo+SpringMVC+Zookeeper+Kafka+MongoDb 。

    第一个任务是设计一个商品日志的存储与查询的服务接口,逻辑实现用的是Dubbo+SpringMVC,数据保存在MongoDb中,Zookeeper作为服务中介。由于使用频率并不是很高 Kafka 消息队列并没有用到。

    调用方是用.NET写的管理后台,第一次调通就发现有问题,部分数据值没有接受到,从Controller进来就是空值。

     

    部分字段值没有接收到,找java组的同事看了下,说我的字段命名不符合java规范,至于接收不到的原因还不清楚。

    我重新按照java命名规范设计了一个新的class,重新测试问题全部解决,看来按照规范来能避免很多坑。

    以下是网友的解决方案

    1.正确的处理方法:

    给每个属性指定别名,指定的方法与controller类似,如下:

     public class User {

    	
    	@JsonProperty(value = "Name")
    	private String name;
    	
    	@JsonProperty(value = "Age")
    	private int age;
    }
    

    经过指定相应的名字后,我遇到的问题就被解决了。

    2.分析出现错误的原因:

    由于注入时,使用的是setName(...),setSex(...),按照java的命名规范,对应的变量,name和sex会被赋值,但是如 果变量命名为Name和Sex的话,虽然生成的setter函数依然是setName(...),setSex(...),

    但是spring框架注入时就 无法分辨到底是name还是Name,依然会按照命名规则来,所以依然会给name赋值,如果恰好没有按照命名规则来,使用的是Name的话,就无法完成 注入。

    3.结论:

    编写java在没有其他原因的情况下,最还还是按照java编程规范来编写,毕竟是一套约定俗成的规则,

    大家都在按照这个规则在做事,如果不按常理出牌,那么出问题是不可避免的,出了这种问题解决起来也是相当的麻烦,毕竟spring框架不是谁都能改的。

    最后说一下C#与Java中的属性命名规范的不同:

    c#简写        public string ProductTitle { get; set; }     按照大驼峰命名法,一般要求首字母大写

    c#完整        private string title="";  //私有变量

                     public string ProductTitle  //序列化为json时以这个为准

          {

            get{return this.title;}  

            set{this.title=value;}

          }

    java    private String productTitle;//按照小驼峰命名法,这个才是属性而不是C#中的私有变量,序列化为json时以这个为准
          public String getProductTitle()
          {
            return title;
          }
          public void setProductTitle(String value)
          {
            title = value;
          }

  • 相关阅读:
    【android】 判断文件是否存在,ImageView scaletype
    【live】回老家,那些感触
    【android】 浏览文件,如浏览sd卡下的图片文件
    【android】java.lang.NoClassDefFoundError或classnotfount等异常错误
    【android】style和theme
    【android】两个按钮的宽度各占屏幕的一半
    【java】html解析
    关于敏感词过滤的一点想法
    JAVA中Vector与ArrayList异同
    MySQL实用语句 GROUP BY ... HAVING ...
  • 原文地址:https://www.cnblogs.com/westfruit/p/5802001.html
Copyright © 2020-2023  润新知