我的模型看起来像这样:
@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
任何人都知道这可能导致什么?我不明白为什么它会期待一个整数。
我可能做了一些愚蠢的事情,因为我对这个框架很陌生。 谢谢你的帮助。
答案 0 :(得分:8)
您的域对象的标识符显然是int
类型。这意味着,您的存储库需要声明为extends CrudRepository<MyModel, Integer>
。