Как настроить 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);
}
}