Я пытаюсь обработать ответ, который я получаю через конечную точку отдыха. Я пытаюсь обработать ответ, но получаю эту ошибку
«Ошибка определения типа»
Вот как выглядит ответ
{
"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 +
'}';
}
}
Вот как я обрабатываю ответ
@PostMapping(value = "/stk-callback")
public String mpesaStkCalback(@RequestBody MpesaBody callbackResponse) throws IOException {
return callbackResponse.getBody().getStkCallback().getMerchantRequestID();
}
Это ошибка трассировки стека, которую я получаю, когда достигаю конечной точки
{
"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"
}