【发布时间】:2014-11-04 16:34:42
【问题描述】:
我正在关注 spring-data-rest 指南Accessing JPA Data with REST。当我 http 发布一条新记录时,它会被插入(响应是 201)。太好了,但是有没有办法配置 REST MVC 代码以返回新创建的对象?我宁愿不必发送搜索请求来查找新实例。
【问题讨论】:
标签: spring rest spring-data-jpa
我正在关注 spring-data-rest 指南Accessing JPA Data with REST。当我 http 发布一条新记录时,它会被插入(响应是 201)。太好了,但是有没有办法配置 REST MVC 代码以返回新创建的对象?我宁愿不必发送搜索请求来查找新实例。
【问题讨论】:
标签: spring rest spring-data-jpa
如果您使用的是 Spring Boot,则可以将以下行添加到您的 application.properties 文件中,分别用于 POST(创建)和 PUT(更新)
spring.data.rest.return-body-on-create=true
spring.data.rest.return-body-on-update=true
【讨论】:
这是另一个使用 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);
}
}
【讨论】:
您不必搜索创建的实体。正如 HTTP 规范所建议的那样,POST 请求返回状态代码 201 Created 应该包含一个 Location 标头,其中包含刚刚创建的资源的 URI。
因此,您需要做的就是有效地向该特定 URI 发出 GET 请求。 Spring Data REST 在RepositoryRestConfiguration.setReturnBodyOnCreate(…) 和….setReturnBodyOnUpdate(…) 上也有两个方法,您可以使用它们来配置框架以立即返回刚刚创建的资源的表示。
【讨论】:
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);
}
}
或
@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);
}
}
祝你好运!
【讨论】: