当前位置: 首页 > 知识库问答 >
问题:

Spring数据REST和自定义实体查找(提供的id类型错误)

帅彦
2023-03-14

我有一个模型看起来像这样:

@Entity
public class MyModel {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(unique = true, nullable = false)
    @RestResource(exported = false)
    private int pk;

    @Column(unique = true, nullable = false)
    private String uuid = UUID.randomUUID().toString();

    @Column(nullable = false)
    private String title;

    public int getPk() {
        return pk;
    }

    public void setPk(int pk) {
        this.pk = pk;
    }

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

如您所见,我有一个自动递增的PK作为模型的ID,但也是一个随机的UUID。我想使用数据库中的PK作为主键,但希望使用UUID作为面向公众的ID(用于URL等)。

我的仓库看起来像这样:

@RepositoryRestResource(collectionResourceRel = "my-model", path = "my-model")
public interface MyModelRepository extends CrudRepository<MyModel, String> {

    @RestResource(exported = false)
    MyModel findByUuid(@Param("uuid") String id);
}

如您所见,我已将存储库设置为使用String作为ID。

最后,我在配置文件中设置实体查找,如下所示:

@Component
public class RepositoryEntityLookupConfig extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {

        config.withEntityLookup().forRepository(MyModelRepository.class, MyModel::getUuid, MyModelRepository::findByUuid);

    }
}

这对于GET和POST请求非常有效,但是由于某种原因,我在PUT和DELETE方法上返回了错误。

o.s.d.r.w.RepositoryRestExceptionHandler : Provided id of the wrong type for class MyModel. Expected: class java.lang.Integer, got class java.lang.String

有人知道这可能是什么原因吗?我不明白为什么它需要一个整数。

我可能在做一些愚蠢的事情,因为我对这个框架非常陌生。谢谢你的帮助。

共有1个答案

郑功
2023-03-14

您的域对象的标识符显然属于< code>int类型。这意味着,您的存储库需要声明为< code >扩展CrudRepository

 类似资料:
  • org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.IllegalArgumentException:为类com.DatabaseProject.Questor.Model.Question提供了错误类型的id。应为:class java.lang.Integer,got class java.lang

  • 在我的数据库中,我有一个具有以下属性的表“CITA”:id,fecha\u hora,description,id\u empleado,id\u cliente。 我还有一个Spring JPA存储库: 我需要这个查询: 我的问题是我不知道我应该把它放在哪里来还给我像地图这样的东西 因为它不起作用: 编辑 如果我试图从我的REST控制器调用estadistic as(),我有一个错误。 这是我的

  • Spring数据REST(尤其是Spring HATEOAS)将RESTful ID(即URI)与实体ID解耦,在保存新对象时,我很难将它们链接起来。有关此解耦的有趣讨论,请参见https://github.com/SpringSource/spring-data-rest/issues/13. 假设一个客户端应用程序想要创建一个新的票证资源和一个关联的票证类别资源。我想针对远程Spring数据R

  • 我有一个SpringBoot项目,它使用SpringDataREST生成我的rest接口,我正在尝试允许对嵌套资源进行分页。我遵循了这一解决方法,并陷入了实现findBy查询的困境。 我有以下设备实体: 我需要使用userId查询它: 因此,我在DevicePository中创建了以下方法: 但我在尝试向该endpoint发送请求时遇到以下异常: 有人能告诉我我做错了什么吗? 编辑:谢谢你的回复,

  • 问题内容: 我收到错误消息: org.hibernate.TypeMismatchException:为类BEntity提供了错误类型的ID。预期:类BEntity,得到类AEntity HQL查询: hibernate源代码 当我在SQL Explorer中运行代码时,只能在代码中运行它会导致问题… 问题答案: 看来这是hibernate3.2.6版中的一个缺陷,该缺陷仍未解决。碰到了这个JIR

  • 我有一个实体Person,它有一个属性Name。name没有被标记为实体。对于Name类,我有一个属性转换器,它通过名字和姓氏的字符串连接创建一个全名。所以对于个人实体,列名是字符串类型。 这是可行的。但现在我想扩展我的个人存储库。我想按她的姓找人。但是 或 不起作用。我得到以下例外: 我怎样才能解决这个问题?谢谢和问候 编辑: