Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;类型定义错误“;处理响应时出错_Java_Spring Boot - Fatal编程技术网

Java &引用;类型定义错误“;处理响应时出错

Java &引用;类型定义错误“;处理响应时出错,java,spring-boot,Java,Spring Boot,我正试图通过rest端点获得流程响应。我正在尝试处理响应,但不断出现此错误 “类型定义错误” 这就是反应的样子 { "Body": { "stkCallback": { "MerchantRequestID": "QWERTY00000", "CheckoutRequestID": "200220202146218185", "ResultCode": "0", "Result

我正试图通过rest端点获得流程响应。我正在尝试处理响应,但不断出现此错误

“类型定义错误”

这就是反应的样子

{
    "Body": {
        "stkCallback": {
            "MerchantRequestID": "QWERTY00000",
            "CheckoutRequestID": "200220202146218185",
            "ResultCode": "0",
            "ResultDesc": "The service request is processed successfully.",
            "CallbackMetadata": {
                "Item": [
                    {
                        "Name": "Amount",
                        "Value": 1
                    },
                    {
                        "Name": "ReceiptNumber",
                        "Value": "XXXXXXXX"
                    },
                    {
                        "Name": "Balance"
                    },
                    {
                        "Name": "TransactionDate",
                        "Value": 20200220214632
                    },
                    {
                        "Name": "PhoneNumber",
                        "Value": 0000000000
                    }
                ]
            }
        }
    }
}
我的Pojo课程是这样的

public class MpesaBody {

    @SerializedName("Body")
    private Body body;

    public MpesaBody(Body body) {
        this.body = body;
    }

    public Body getBody() {
        return body;
    }

    public void setBody(Body body) {
        this.body = body;
    }

    @Override
    public String toString() {
        return "MpesaBody{" +
                "body=" + body +
                '}';
    }
}

public class Body {

    @Expose
    private StkCallback stkCallback;

    public Body(StkCallback stkCallback) {
        this.stkCallback = stkCallback;
    }

    public StkCallback getStkCallback() {
        return stkCallback;
    }

    public void setStkCallback(StkCallback stkCallback) {
        this.stkCallback = stkCallback;
    }

    @Override
    public String toString() {
        return "Body{" +
                "stkCallback=" + stkCallback +
                '}';
    }
}

public class StkCallback {

    @SerializedName("CallbackMetadata")
    private CallbackMetadata callbackMetadata;
    @SerializedName("CheckoutRequestID")
    private String checkoutRequestID;
    @SerializedName("MerchantRequestID")
    private String merchantRequestID;
    @SerializedName("ResultCode")
    private Long resultCode;
    @SerializedName("ResultDesc")
    private String resultDesc;

    public StkCallback(CallbackMetadata callbackMetadata, String checkoutRequestID, String merchantRequestID, Long resultCode, String resultDesc) {
        this.callbackMetadata = callbackMetadata;
        this.checkoutRequestID = checkoutRequestID;
        this.merchantRequestID = merchantRequestID;
        this.resultCode = resultCode;
        this.resultDesc = resultDesc;
    }

    public CallbackMetadata getCallbackMetadata() {
        return callbackMetadata;
    }

    public void setCallbackMetadata(CallbackMetadata callbackMetadata) {
        this.callbackMetadata = callbackMetadata;
    }

    public String getCheckoutRequestID() {
        return checkoutRequestID;
    }

    public void setCheckoutRequestID(String checkoutRequestID) {
        this.checkoutRequestID = checkoutRequestID;
    }

    public String getMerchantRequestID() {
        return merchantRequestID;
    }

    public void setMerchantRequestID(String merchantRequestID) {
        this.merchantRequestID = merchantRequestID;
    }

    public Long getResultCode() {
        return resultCode;
    }

    public void setResultCode(Long resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultDesc() {
        return resultDesc;
    }

    public void setResultDesc(String resultDesc) {
        this.resultDesc = resultDesc;
    }

    @Override
    public String toString() {
        return "StkCallback{" +
                "callbackMetadata=" + callbackMetadata +
                ", checkoutRequestID='" + checkoutRequestID + '\'' +
                ", merchantRequestID='" + merchantRequestID + '\'' +
                ", resultCode=" + resultCode +
                ", resultDesc='" + resultDesc + '\'' +
                '}';
    }
}

public class CallbackMetadata {

    @SerializedName("Item")
    private List<Item> item;

    public CallbackMetadata(List<Item> item) {
        this.item = item;
    }

    public List<Item> getItem() {
        return item;
    }

    public void setItem(List<Item> item) {
        this.item = item;
    }

    @Override
    public String toString() {
        return "CallbackMetadata{" +
                "item=" + item +
                '}';
    }
}
这是我到达端点时得到的stacktrace错误

 {
    "timestamp": "2020-02-20T21:10:48.180+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Type definition error: [simple type, class com.poolafrica.billing.mpesa.model.MpesaBody]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.poolafrica.billing.mpesa.model.MpesaBody` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)\n at [Source: (PushbackInputStream); line: 1, column: 2]",
    "path": "/api/v1/billing/stk-callback"
}
尝试将控制器方法参数有效负载用作:

@PostMapping(value = "/stk-callback")
public String mpesaStkCalback(@RequestBody MpesaBody callbackResponse) throws IOException {
    return callbackResponse.getBody().getStkCallback().getMerchantRequestID();
 }

另外,更喜欢提供默认构造函数而不是POJO

你能发布你的POJO和错误stackTrace.Hey吗。我已经更新了我的问题抱歉,这个“stacktrace错误”并没有说明太多(这是一个“rest响应”,告诉我们“一些内部服务器错误”…在“某个时间戳”),通过stacktrace我们希望得到一些“服务器日志”,它不是堆栈跟踪,而是JSON响应。500通常是代码中未处理的异常——您是否尝试过在该方法中设置断点并逐步了解它如何处理请求?由于缺少请求正文注释,
callbackResponse
很可能为空。嘿,谢谢,刚刚这么做了,用新错误更新了我的问题,我正在用您的更改和错误更新问题。此外,提供项目pojoUpdated。谢谢,它只是说没有def。犯人被发现了。尝试在所有POJO中添加默认(无参数)构造函数
@PostMapping(value = "/stk-callback")
public String mpesaStkCalback(@RequestBody MpesaBody callbackResponse) throws IOException {
    return callbackResponse.getBody().getStkCallback().getMerchantRequestID();
 }