【发布时间】:2019-12-22 04:47:00
【问题描述】:
我遇到了不寻常且有趣的技术以及使用Spring Cloud Function 拆分业务和技术实现的方法,这使得java.util.function 类的实现可以充当端点
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>
简而言之,有一个简单的静态 List<Book> 代表一个存储库:
private final static List<Book> books = Arrays.asList(
new Book(1, "One"),
new Book(2, "Two"),
new Book(3, "Three"));
以下@Bean根据方法名称及其返回类型启用指定端点:
// GET localhost:8080/books -> returns all the books:
@Bean
public Supplier<List<Book>> books() {
return () -> books;
}
// GET localhost:8080/book/2 -> returns a particular book
@Bean
public Function<Integer, List<Book>> book() {
return id -> books.stream().filter(b -> b.getId() == id).collect(Collectors.toList());
}
// POST localhost:8080/newBook -> posts a new book and returns all of them
// Consumer<Book> would supply the POST with no output
@Bean
public Function<Book, List<Book>> newBook() {
return book -> {
books.add(book);
return books;
};
}
问题:
-
是否可以使用
java.util.function中的一个或多个类组合来实现完全符合 REST 的解决方案?我只能创作上面的那些。我对以下模式特别感兴趣:GET /books GET /books/1 POST /books PUT/PATCH /books/1 DELETE /books/1 GET /books/1/chapters/2/paragraphs/3 如何避免端点的方法名称冲突,因为所有方法似乎都必须遵循空参数签名规则,否则不可自动装配。我从https://www.baeldung.com/spring-cloud-function 开始,它看起来很像RPC than REST。
-
有没有办法识别网址参数?
GET /books?sort=name
【问题讨论】:
标签: java spring rest java-8 spring-cloud