arc*_*her 6 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;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我有一个自动递增的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);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我已将存储库设置为使用String作为ID.
最后,我将实体查找设置在配置文件中,如下所示:
@Component
public class RepositoryEntityLookupConfig extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.withEntityLookup().forRepository(MyModelRepository.class, MyModel::getUuid, MyModelRepository::findByUuid);
}
}
Run Code Online (Sandbox Code Playgroud)
这对于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
Run Code Online (Sandbox Code Playgroud)
有谁知道这可能导致什么?我不明白为什么它期待一个整数.
我可能做了一些愚蠢的事情,因为我对这个框架很陌生.谢谢你的帮助.
| 归档时间: |
|
| 查看次数: |
1118 次 |
| 最近记录: |