Не удается создать экземпляр com.google.cloud.datastore.Key - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь отправить объект 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 = []

Есть ли другой способ построить ключ из строки ответа?

...