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

时间:2016-12-06 08:22:43

标签: spring spring-data-jpa spring-data-rest

我的模型看起来像这样:

@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 个答案:

答案 0 :(得分:8)

您的域对象的标识符显然是int类型。这意味着,您的存储库需要声明为extends CrudRepository<MyModel, Integer>