猿问

@RequestBody 变量返回空属性

我编写了一个控制器,用于接收发布 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;



@RestController

public 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 对象。


斯蒂芬大帝
浏览 221回答 2
2回答

HUX布斯

您可以通过使用@JsonProperty字段上方的注释来解决此问题,如下所示:...@JsonPropety(value = "Amount")private Double amount;...或者,您可以按照评论中的建议,重命名您的属性以小写字母开头(在 VM 中和传入中json)@OrangeDog。

绝地无双

您的类定义了一个名为的属性meterNumber,但您的 JSON 对象却说MeterNumber。如果您必须MeterNumber在 JSON 中添加@JsonProperty注释,则需要添加注释。以大写字母开头的字段名称违反 Java 和 JSON 命名约定。顺便说一句,您可以通过使用Lombok来避免所有样板:@Datapublic 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,或者完全省略。
随时随地看视频慕课网APP

相关分类

Java
我要回答