java 给body赋值_spring中使用@RequestBody 接收到的对象值为空

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

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

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

d68ca3ab2f18d5502e5060b0298240e8.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;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java使用`@RequestBody`注解可以接收前端传递的字符串数据。这个注解通常与Spring MVC框架一起使用,用于将请求的主体部分(body)转换为Java对象。[1] 具体使用方式如下: 1. 首先,在你的控制器方法参数上添加`@RequestBody`注解,表示要接收请求体的数据。 2. 然后,将参数的类型设置为`String`,因为`@RequestBody`默认将请求体的内容转换为字符串。 3. 当接收到请求时,Spring MVC会自动将请求体的数据转换成String对象,并将其赋值给控制器方法的参数。 需要注意的是,`@RequestBody`注解只能用于接收请求体的数据,而不能用于接收URL路径参数或请求参数(如查询字符串参数)。如果你需要接收URL路径参数,可以使用`@PathVariable`注解;如果需要接收请求参数,可以使用`@RequestParam`注解。 至于你提到的报错`HttpMediaTypeNotSupportedException: Content type ‘text/xml;charset=UTF-8’ not supported`,这是因为消息转换器不支持指定的Content-Type。你可以通过配置消息转换器来解决这个问题,添加一个支持`text/xml`类型的消息转换器即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringMvc接收前端数据的几种方式.md](https://download.csdn.net/download/weianswer/12502560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [2020-12-09 @RequestBody 接收String 报xxx: Content type ‘text/xml;charset=UTF-8‘ not supported](https://blog.csdn.net/qq_42130098/article/details/110919435)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值