Я следую руководству spring -data-rest Доступ к данным JPA с помощью REST. Когда я нахожу http-запись новой записи, она вставлена (и ответ - 201). Это здорово, но есть ли способ настроить код REST MVC для возврата вновь созданного объекта? Я бы предпочел не отправлять запрос поиска, чтобы найти новый экземпляр.
Как настроить Spring Data REST для возврата представления ресурса, созданного для запроса POST?
Ответ 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);
}
}