Spring中如何通过CrudRepository的`findAll()`方法在序列化中包含恢复对象的id?

Posted

技术标签:

【中文标题】Spring中如何通过CrudRepository的`findAll()`方法在序列化中包含恢复对象的id?【英文标题】:How to include in serialization the id of the recovered objects through the `findAll()` method of CrudRepository in Spring? 【发布时间】:2015-01-05 07:17:52 【问题描述】:

我有以下实体类:

@Entity
public class GameSet 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String question;
    .......

这是我的存储库:

@Repository
public interface GameSetRepository extends CrudRepository<GameSet, Long>  

这是我的控制器的相关部分:

...
    @RequestMapping(value = "/test/getgamesets", method = RequestMethod.GET)
    public @ResponseBody Collection<GameSet> getGameSets() 
        return Lists.newArrayList(gamesets.findAll());
    
...

这是服务器响应:


    "question": "Choose one of the following, which is wrong.",
    "title1": "MovieA",
    "title2": "MovieB",
    "title3": "MovieC",
    "title4": "MovieD",
    "wrong": 1,
    "explain": "I don't know why this is wrong.",
    "rates": 0,
    "rate": 0

除了其他属性之外,我还想在请求结果中获取对象的 id。

我应该重写findAll() 方法吗?

感谢您的关注和时间!

【问题讨论】:

这完全取决于您如何将实体转换为 JSON,也可能取决于实体的代码。它与 CrudRepository 无关。 感谢您的回答!你的意思是这样link? 也许,也许不是。我不知道您是否正在使用 Spring-data-rest 以及此答案是否适用于您的应用程序。 这是 spring-data-rest 吗? 【参考方案1】:

我只是在上一个链接中的 Application 类中添加以下代码:

@Configuration
public static class RepositoryConfig extends RepositoryRestMvcConfiguration 
    @Override
    protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) 
        config.exposeIdsFor(GameSet.class);
    

它的工作原理!感谢 JB Nizet 让我明白我的问题所在!

【讨论】:

查看this,以防您需要公开所有实体的标识符,或者仅针对那些扩展或实现特定超类或接口的实体。

以上是关于Spring中如何通过CrudRepository的`findAll()`方法在序列化中包含恢复对象的id?的主要内容,如果未能解决你的问题,请参考以下文章

通过 HTTP 保护 Spring Data RepositoryRestResource (CrudRepository),但不在内部

如何在 Spring Boot CrudRepository 中搜索数组

Spring CrudRepository deleteAll()什么都不做

如何在 Spring Data JPA CRUDRepository 中添加缓存功能

使用 Spring Data JDBC 和 CrudRepository 接口的多个数据源

如何在不使用 CrudRepository 的情况下将 java spring boot 应用程序中定义的实体反映在数据库中