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

时间:2014-09-10 21:28:43

标签: spring rest spring-data-jpa

我正在关注spring-data-rest指南Accessing JPA Data with REST。当我发布一条新记录时,它会被插入(响应是201)。这很好,但是有没有办法配置REST MVC代码来返回新创建的对象?我不必发送搜索请求来查找新实例。

4 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:10)

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);
    }
}

@Configuration
@EnableMongoRepositories
@EnableAutoConfiguration
public class Application extends RepositoryRestMvcConfiguration {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }

    @Override
    protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        super.configureRepositoryRestConfiguration(config);
        config.setReturnBodyOnCreate(true);
    }
}

祝你好运!

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

这是使用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);
    }
}