2014-09-10 10 views
16

Tôi đang làm theo hướng dẫn nghỉ ngơi về dữ liệu vào mùa xuân Accessing JPA Data with REST. Khi tôi http đăng một bản ghi mới, nó sẽ được chèn (và phản hồi là 201). Điều đó thật tuyệt, nhưng có cách nào để cấu hình mã REST MVC để trả về đối tượng mới được tạo ra không? Tôi không muốn gửi yêu cầu tìm kiếm để tìm phiên bản mới.Làm thế nào để cấu hình Spring Data REST để trả về biểu diễn của tài nguyên được tạo cho một yêu cầu POST?

Trả lời

17

Bạn không phải tìm kiếm đối tượng đã tạo. Khi thông số HTTP gợi ý, POST yêu cầu trả về mã trạng thái là 201 Created được cho là chứa tiêu đề Location chứa URI của tài nguyên vừa tạo.

Vì vậy, tất cả những gì bạn cần làm là thực hiện yêu cầu GET hiệu quả cho URI cụ thể đó. Spring Data REST cũng có hai phương thức trên RepositoryRestConfiguration.setReturnBodyOnCreate(…)….setReturnBodyOnUpdate(…) mà bạn có thể sử dụng để định cấu hình khuôn khổ để trả về ngay lập tức đại diện của tài nguyên vừa tạo.

+2

Dựa trên câu hỏi này, tôi đã thực sự được cập nhật TẤT CẢ các hướng dẫn bắt đầu của REST dữ liệu Spring để bao gồm thông tin này, vì vậy bạn không cần phải đến đây để khám phá tính năng này. – gregturn

+0

@ gregturn Tôi nghĩ đây chính là giải pháp mà tôi đang tìm kiếm. – chrylis

+0

Tuyệt vời! Tôi nhớ đọc về nó nhưng khi tôi bắt đầu thử nghiệm tôi quên nơi để tìm. –

9

Ví dụ với 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); 
    } 
} 

hoặc

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

Good Luck!

+2

configurationRepositoryRestConfiguration deprecated ... kể từ 2.4, triển khai RepositoryRestConfigurer.configureRepositoryRestConfiguration (RepositoryRestConfiguration) hoặc trực tiếp hoặc mở rộng RepositoryRestConfigurerAdapter và ghi đè phương thức. –

0

Đây là một biến thể sử dụng DI thay vì mở rộng RepositoryRestMvcConfiguration hoặc sử dụng 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); 
    } 
} 
+0

là giải pháp thay thế nào tốt hơn, sau đó là giải pháp của Andrey, hay nó thực sự chỉ là một giải pháp thay thế? Tôi có nghĩa là, có bất kỳ lợi ích bằng cách sử dụng một trong hai người trong số họ? –

3

Nếu bạn đang sử dụng Spring Boot, bạn có thể thêm các dòng sau vào tập tin application.properties của bạn cho POST (tạo) và PUT (cập nhật) tương ứng

spring.data.rest.return-body-on-create=true 
spring.data.rest.return-body-on-update=true 
Các vấn đề liên quan