如何配置SpringDataREST以返回为POST请求创建的资源的表示形式?

如何配置SpringDataREST以返回为POST请求创建的资源的表示形式?,spring,rest,spring-data-jpa,Spring,Rest,Spring Data Jpa,我遵循spring数据rest指南。当我发布一条新记录时,它被插入(响应是201)。这很好,但是有没有办法配置RESTMVC代码以返回新创建的对象?我不希望发送搜索请求来查找新实例。您不必搜索已创建的实体。正如HTTP规范所建议的那样,POST请求返回的状态代码为201 Created,应该包含一个Location头,其中包含刚刚创建的资源的URI 因此,您所需要做的就是有效地向该特定URI发出GET请求。Spring Data REST在RepositoryRestConfiguration上

我遵循spring数据rest指南。当我发布一条新记录时,它被插入(响应是201)。这很好,但是有没有办法配置RESTMVC代码以返回新创建的对象?我不希望发送搜索请求来查找新实例。

您不必搜索已创建的实体。正如HTTP规范所建议的那样,
POST
请求返回的状态代码为
201 Created
,应该包含一个
Location
头,其中包含刚刚创建的资源的URI


因此,您所需要做的就是有效地向该特定URI发出
GET
请求。Spring Data REST在
RepositoryRestConfiguration上还有两种方法。setReturnBodyOnCreate(…)
…setReturnBodyOnUpdate(…)
,您可以使用它们来配置框架,以立即返回刚刚创建的资源的表示形式。

Spring Boot示例:

@Configuration
@EnableMongoRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {

        ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);

        RepositoryRestConfiguration restConfiguration = ctx.getBean(RepositoryRestConfiguration.class);

        restConfiguration.setReturnBodyOnCreate(true);
    }
}


祝你好运

这是另一个使用DI而不是扩展RepositoryRestMvcConfiguration或使用ConfigurableApplicationContext的变体

@SpringBootApplication
@EnableConfigurationProperties
@Configuration
@ComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);    
    }

    @Autowired private RepositoryRestConfiguration repositoryRestConfiguration;

    @PostConstruct
    public void exposeIds() {
        this.repositoryRestConfiguration.setReturnBodyForPutAndPost(true);
    }
}

如果您使用的是Spring Boot,则可以将以下行分别添加到
POST
(创建)和
PUT
(更新)的
应用程序.properties
文件中

spring.data.rest.return-body-on-create=true
spring.data.rest.return-body-on-update=true

基于这个问题,我实际上已经更新了所有的Spring Data REST入门指南以包含这些信息,因此您不必到这里来发现该功能。@gregturn我认为这正是我一直在寻找的解决方案。太好了!我记得读过关于它的文章,但当我开始测试时,我忘了去哪里看。应该在哪里调用RepositoryRestConfiguration.setReturnBodyOnCreate(true)?这个替代方案比Andrey的解决方案好吗?或者它真的只是一个替代方案?我的意思是,使用它们有什么好处吗?configureRepositoryRestConfiguration不推荐使用…从2.4开始,实现RepositoryRestConfigurer.configureRepositoryRestConfiguration(RepositoryRestConfiguration)直接或扩展RepositoryRestConfigurerAdapter并重写该方法。
spring.data.rest.return-body-on-create=true
spring.data.rest.return-body-on-update=true