为了账号安全,请及时绑定邮箱和手机立即绑定

@RequestBody 变量返回空属性

@RequestBody 变量返回空属性

斯蒂芬大帝 2021-11-24 18:35:08
我编写了一个控制器,用于接收发布 json 的发布请求,但是当我尝试访问对象字段时,它返回 null。控制器的代码如下package com.example;import com.example.Services.ZesaServices;import com.example.models.Zesa.ZesaRequest;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class MoneyResource {@RequestMapping("/services")public String getServices(){    return "We do everything";}@PostMapping(value="/zesa")public String payZesa(@RequestBody ZesaRequest newZesaRequest){    Logger log = LoggerFactory.getLogger(YomoneyResource.class);    log.info("Json Object parsed works eg: "+newZesaRequest.getMeterNumber());    return newZesaRequest.getMeterNumber().toString();  }}当我发送下面的请求时,我的代码正在打印 null{   "AgentAccountDetails":"example:123",   "MeterNumber":"1110-52-8867",   "PaymentMethod":1,   "Amount":10.50,   "MobileNumber":"0123456789",   "TransactionType":1,   "PaymentAccountNumber":"0123456789",   "PaymentAccountDetails":"null"}当我运行它时,它返回一个空字符串。我不确定问题出在哪里,我查看了其他示例,他们遵循了类似的模式,我运行了他们的代码,它按预期工作,但我的似乎没有将 json 主体转换为 Java 对象。
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

您可以通过使用@JsonProperty字段上方的注释来解决此问题,如下所示:


...

@JsonPropety(value = "Amount")

private Double amount;

...

或者,您可以按照评论中的建议,重命名您的属性以小写字母开头(在 VM 中和传入中json)@OrangeDog。


查看完整回答
反对 回复 2021-11-24
?
绝地无双

TA贡献1946条经验 获得超4个赞

您的类定义了一个名为的属性meterNumber,但您的 JSON 对象却说MeterNumber。


如果您必须MeterNumber在 JSON 中添加@JsonProperty注释,则需要添加注释。


以大写字母开头的字段名称违反 Java 和 JSON 命名约定。


顺便说一句,您可以通过使用Lombok来避免所有样板:


@Data

public class ZesaRequest {

    @JsonProperty("Amount")

    private Double amount;


    @JsonProperty("MeterNumber")

    private String meterNumber;


    @JsonProperty("PaymentAccountNumber")

    private String paymentAccountNumber;


    @JsonProperty("PaymentAccountDetails")

    private String paymentAccountDetails;


    @JsonProperty("PaymentMethod")

    private int paymentMethod;


    @JsonProperty("MobileNumber")

    private String mobileNumber;


    @JsonProperty("AgentAccountDetails")

    private String agentAccountDetails;


    @JsonProperty("TransactionType")

    private int transactionType;

}

你也可能不想要"PaymentAccountDetails":"null". 它应该是"PaymentAccountDetails":null,或者完全省略。


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 220 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信