У меня есть ответ ниже в json
{
"date": 1590656196885,
"host": "qa1234",
"api": "v8",
"response": {
"type": "PickUp",
"payload": {
"serialNumber": "245547105486858"
}
}
}
Это мои классы ответов
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.init.models.Response;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class TransactionsResponseDetails extends ErrorResponse {
@JsonProperty("date")
private String date;
@JsonProperty("host")
private String host;
@JsonProperty("api")
private String api;
@JsonProperty("response")
private Response response;
public TransactionsResponseDetails() {}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getApi() {
return api;
}
public void setApi(String api) {
this.api = api;
}
public Response getResponse() {
return response;
}
public void setResponse(Response response) {
this.response = response;
}
}
-
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Response {
@JsonProperty("payload")
private Payload payload;
@JsonProperty("type")
private String type;
public Response() {}
public Payload getPayload() {
return payload;
}
public void setPayload(Payload payload) {
this.payload = payload;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
-
import com.fasterxml.jackson.annotation.JsonProperty;
class Payload {
@JsonProperty("serialNumber")
private String serialNumber;
public Payload() {}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
}
и это фактический вызов с RetroFit
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import com.init.TransactionsResponse;
import com.init.models.responses.TransactionsResponseDetails;
.
.
.
Call<TransactionsResponseDetails> Rcall = requestInterface.transactionsDetails(transactionResponseModelForTransactionDetails.get(0));
Rcall.enqueue(new Callback<TransactionsResponseDetails>() {
@Override
public void onResponse(Call<TransactionsResponseDetails> call, Response<TransactionsResponseDetails> response) {
try {
TransactionsResponseDetails transactionsResponseDetails;
if (response.isSuccessful()) {
transactionsResponseDetails = response.body();
} else {
transactionsResponseDetails = ErrorResponse.parseError(response, TransactionsResponseDetails.class);
if (BuildConfig.DEV_STATUS) {
Log.d("TransactionsModelError:", transactionsResponseDetails.getErrorModel().getErrorMessage());
}
}
} catch (Exception ex) {
if (BuildConfig.DEV_STATUS) {
ex.printStackTrace();
}
}
Это мой клиент
@Headers({"Content-Type: application/json", "Accept: application/json", BuildConfig.API_BASE_KEY})
@POST("transactions/details")
Call<TransactionsResponseDetails> transactionsDetails(@Body TransactionResponseModelForTransactionDetails transactionResponseModelForTransactionDetails);
Это моя настройка маппера
OkHttpClient : private static Retrofit.Builder builder = new Retrofit.Builder() .baseUrl(API_BASE_URL) .addConverterFactory(JacksonConverterFactory.create(getMapper()));
private static ObjectMapper getMapper(){
ObjectMapper mapper = jacksonObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true);
return mapper;
}
звонок работает. Я вижу ответ json в своих журналах. Проблема в том, что сопоставление работает только для «date», «host» и «api». Независимо от того, что я пробовал, объект «ответа» не отображается. Не могли бы вы мне помочь?