java后台set()值为空_spring中使用@RequestBody 接收到的对象值为空

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

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

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

c07aefa2b7c9cd06994d8935be401c3a.png

部分字段值没有接收到,找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;

}

时间: 08-22

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值