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