Как настроить Spring Data REST для возврата представления ресурса, созданного для запроса POST?

Я следую руководству spring -data-rest Доступ к данным JPA с помощью REST. Когда я нахожу http-запись новой записи, она вставлена ​​(и ответ - 201). Это здорово, но есть ли способ настроить код REST MVC для возврата вновь созданного объекта? Я бы предпочел не отправлять запрос поиска, чтобы найти новый экземпляр.

Ответы

Ответ 1

Вам не нужно искать созданный объект. Как показывает спецификация HTTP, POST запросы, возвращающие код состояния 201 Created, должны содержать заголовок Location, который содержит URI только что созданного ресурса.

Таким образом, все, что вам нужно сделать, - это эффективно выдавать запрос GET на этот конкретный URI. Spring Data REST также имеет два метода для RepositoryRestConfiguration.setReturnBodyOnCreate(…) и ….setReturnBodyOnUpdate(…), которые вы можете использовать для настройки фреймворка, чтобы немедленно вернуть представление только что созданного ресурса.

Ответ 2

Пример с Spring Загрузка:

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

Удачи!

Ответ 3

Если вы используете Spring Boot, вы можете добавить следующие строки в файл application.properties для POST (create) и PUT (update) соответственно

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

Ответ 4

Вот еще один вариант, который использует 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);
    }
}