How to configure Spring Data REST to return the representation of the resource created for a POST request?

后端 未结 4 1771
粉色の甜心
粉色の甜心 2021-02-07 03:12

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 w

相关标签:
4条回答
  • 2021-02-07 03:51

    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.

    0 讨论(0)
  • 2021-02-07 03:53

    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!

    0 讨论(0)
  • 2021-02-07 04:02

    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
    
    0 讨论(0)
  • 2021-02-07 04:11

    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);
        }
    }
    
    0 讨论(0)
提交回复
热议问题