Spring 使用JpaRepository时如何始终返回实体@Id?

Spring 使用JpaRepository时如何始终返回实体@Id?,spring,spring-data-jpa,spring-data-rest,Spring,Spring Data Jpa,Spring Data Rest,将@ReposirotyRestResource绑定到实体AppUser,并扩展JpaRepository,如下所示: @RepositoryRestResource(collectionResourceRel = "users", path = "users") public interface AppUserRepository extends JpaRepository<AppUser, Long> { AppUser findByUsername(@Param("u

@ReposirotyRestResource
绑定到实体
AppUser
,并扩展
JpaRepository
,如下所示:

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface AppUserRepository extends JpaRepository<AppUser, Long> {

    AppUser findByUsername(@Param("username") String username);

}
@Entity
@Table(name = "app_user")
public class AppUser extends AbstractTimestampEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    // ..
}
每当我想
appUserRepository.findUserByUsername(“任何”)
时,我都想接收
id
——出于某种原因,默认行为似乎是不返回此字段


指出我这边的错误或向我解释为什么这是默认行为(也是一个好主意)。

你的问题是关于(你应该更新标记)-它会自动“转换”你的存储库到REST控制器,其中资源ID是资源自链接的一部分,例如:
/appUsers/1
。因此,默认情况下,资源主体不包含其ID

如果需要包含它,可以扩展并添加必要类的公开ID,例如如下所示:

@Bean
public RepositoryRestConfigurerAdapter repositoryRestConfigurerAdapter() {
    return new RepositoryRestConfigurerAdapter() {

        @Override
        public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
            config.exposeIdsFor(AppUser.class);
            super.configureRepositoryRestConfiguration(config);
        }
    };
}
您的问题是关于(您应该更新标记)-它会自动将您的存储库“转换”为REST控制器,其中资源ID是资源自链接的一部分,如:
/appUsers/1
。因此,默认情况下,资源主体不包含其ID

如果需要包含它,可以扩展并添加必要类的公开ID,例如如下所示:

@Bean
public RepositoryRestConfigurerAdapter repositoryRestConfigurerAdapter() {
    return new RepositoryRestConfigurerAdapter() {

        @Override
        public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
            config.exposeIdsFor(AppUser.class);
            super.configureRepositoryRestConfiguration(config);
        }
    };
}

事实上,我发现了另一个问题,因此面临着同样的问题。从github的问题中我可以看出,这样做是为了让客户端具有不可知身份的特性。事实上,我发现了另一个问题,因此面临着同样的问题。从github问题中我可以看出,这样做是为了使客户端具有不可知ID的特性。如果需要公开所有实体的标识符,或者只公开那些扩展或实现特定超类或接口的实体的标识符,如果需要公开所有实体的标识符,或者只公开扩展或实现特定超类或接口的实体的标识符,或者使用特定注释,请查看。