有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法构造com的实例。谷歌。云数据存储。钥匙

我试图用Spring通过HTTP POST请求发送com.google.cloud.datastore.Key对象,但当我收到响应并试图使用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 = []

有没有其他方法可以从响应字符串生成密钥


共 (0) 个答案