将@ReposirotyRestResource
绑定到实体AppUser
并像这样扩展JpaRepository
:
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface AppUserRepository extends JpaRepository<AppUser, Long> {
AppUser findByUsername(@Param("username") String username);
}
AppUser
看起来像这样:
@Entity
@Table(name = "app_user")
public class AppUser extends AbstractTimestampEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
// ..
}
我想在id
时收到appUserRepository.findUserByUsername("whatever")
- 由于某种原因,默认行为似乎是而不是返回此字段。
要么指出我的错误或向我解释为什么这是默认行为(并且是一个好主意)的额外点。
答案 0 :(得分:2)
您的问题是Spring Data REST(您应该更新标签) - 它会自动转换&#39;您的存储库为HATEOES的REST控制器,其中资源ID是包含在资源自身链接中的一部分,如:/appUsers/1
。因此,默认情况下,资源主体不包含其ID。
如果您需要包含它,您可以扩展RepositoryRestConfigurerAdapter并添加必要类的公开ID,例如如下所示:
@Bean
public RepositoryRestConfigurerAdapter repositoryRestConfigurerAdapter() {
return new RepositoryRestConfigurerAdapter() {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(AppUser.class);
super.configureRepositoryRestConfiguration(config);
}
};
}