如果使用 spring-data-rest,则找不到能够从类型 [java.lang.String] 转换为类型 [com.google.cloud.datastore.Key] 的转换器

No converter found capable of converting from type [java.lang.String] to type [com.google.cloud.datastore.Key] error if spring-data-rest is used

我在 spring-data-gcp-datastore 之上使用 spring-data-rest。

我正在尝试使用 HAL 浏览器探索我的资源。最初它工作正常,所以我看到了我的元素:

{
  "_embedded": {
    "configurations": [
      {
        "data": "{\n  \"test\": \"768\",\n  \"test2\": 5\n}",
        "_links": {
          "self": {
            "href": "http://localhost:8083/configurations/Key%7BprojectId=test,%20namespace=,%20path=%5BPathElement%7Bkind=configuration,%20id=null,%20name=k%7D%5D%7D"
          },
          "configuration": {
            "href": "http://localhost:8083/configurations/Key%7BprojectId=test,%20namespace=,%20path=%5BPathElement%7Bkind=configuration,%20id=null,%20name=k%7D%5D%7D"
          }
        }
      }
    ]
  },
  "_links": {
    "self": {
      "href": "http://localhost:8083/configurations{?page,size,sort}",
      "templated": true
    },
    "profile": {
      "href": "http://localhost:8083/profile/configurations"
    }
  },
  "page": {
    "size": 20,
    "totalElements": 1,
    "totalPages": 1,
    "number": 0
  }
}

但是,当我尝试按照 http://localhost:8083/configurations/Key%7BprojectId=test,%20namespace=,%20path=%5BPathElement%7Bkind=configuration,%20id=null,%20name=k%7D%5D%7D 提供的 link 获取某一特定资源时,出现错误: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [com.google.cloud.datastore.Key]

我试过创建转换器并通过这种方式注册它们:

@Component
public class WebConfig implements WebMvcConfigurer  {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^");
        registry.addConverter(new KeyToStringConverter());
        registry.addConverter(new StringToKeyConverter());

    }
}

我看到了打印输出,所以代码已经执行,尽管我在转换器中的打印输出没有。

我有简单的实体:

package com.test.appconfig.datastore.entities;

import lombok.Data;

import com.google.cloud.datastore.Key;

import org.springframework.cloud.gcp.data.datastore.core.mapping.Entity;
import org.springframework.data.annotation.Id;

@Entity
@Data
public class Configuration {

    @Id
    private Key id;

    private String data;

}

还有一个简单的回购:


@RepositoryRestResource
@Repository
@Transactional(isolation = Isolation.SERIALIZABLE)
public interface ConfigurationRepository extends DatastoreRepository<Configuration, Key>{

}

这些错过的转换器是什么?我该如何注册它们?

我找到了 spring 开发人员 here

已经提供的解决方案