Я пытаюсь отправить объект com.google.cloud.datastore.Key
через HTTP-запрос POST с помощью Spring, но когда я получаю ответ и пытаюсь восстановить ключевой объект с помощью Spring ObjectMapper
, возникает исключение:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.google.cloud.datastore.Key` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
Примечание. Интерфейс com.google.cloud.datastore.Key
косвенно реализует Serializable
и был правильно сериализован Spring.
Это код с проблемой:
@Autowired private MockMvc mvc;
@Autowired private ObjectMapper mapper;
// ...
String responseAsString =
this.mvc
.perform(
post("/universe-history-clone")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(this.mapper.writeValueAsString(cloneData)))
.andExpect(status().is(200))
.andExpect(jsonPath("success").value(true))
.andReturn()
.getResponse()
.getContentAsString();
UniverseHistoryClone.Response cloneResponse =
this.mapper.readValue(responseAsString, UniverseHistoryClone.Response.class);
Это упрощенный класс ответа POJO :
public interface UniverseHistoryClone {
Response clone(Data data);
class Data extends ServiceData {
private Long originalAccountId;
private Long originalUniverseId;
private Long destinationAccountId;
private Long destinationUniverseId;
}
class Response {
private boolean success;
private Key newHistoryKeyId;
private Key oldHistoryKeyId;
private String errorCause;
}
}
Это HTTP-ответ:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {Content-Type=[application/json;charset=UTF-8]}
Content type = application/json;charset=UTF-8
Body = {"success":true,"newHistoryKeyId":{"projectId":"<hidden>","namespace":"<hidden>","nameOrId":<hidden>,"id":<hidden>,"kind":"<hidden>","ancestors":[]},"oldHistoryKeyId":{"projectId":"<hidden>","namespace":"","nameOrId":<hidden>,"id":<hidden>,"kind":"<hidden>","ancestors":[]}}
Forwarded URL = null
Redirected URL = null
Cookies = []
Есть ли другой способ построить ключ из строки ответа?