How to configure Spring Data REST to return the re

2020-05-31 05:19发布

I am following the spring-data-rest guide Accessing JPA Data with REST. When I http post a new record it is inserted (and the response is a 201). That is great, but is there a way to configure the REST MVC code to return the newly created object? I'd rather not have to send a search request to find the new instance.

4条回答
Lonely孤独者°
2楼-- · 2020-05-31 05:33

Here's another variant that uses DI rather than extending RepositoryRestMvcConfiguration or using the 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);
    }
}
查看更多
贼婆χ
3楼-- · 2020-05-31 05:36

You don't have to search for the created entity. As the HTTP spec suggests, POST requests returning a status code of 201 Created are supposed to contain a Location header which contains the URI of the resource just created.

Thus all you need to do is effectively issuing a GET request to that particular URI. Spring Data REST also has two methods on RepositoryRestConfiguration.setReturnBodyOnCreate(…) and ….setReturnBodyOnUpdate(…) which you can use to configure the framework to immediately return the representation of the resource just created.

查看更多
迷人小祖宗
4楼-- · 2020-05-31 05:39

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

or

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

Good Luck!

查看更多
迷人小祖宗
5楼-- · 2020-05-31 05:57

If you are using Spring Boot, you can add the following lines to your application.properties file for POST (create) and PUT (update) respectively

spring.data.rest.return-body-on-create=true
spring.data.rest.return-body-on-update=true
查看更多
登录 后发表回答