我遇到了不寻常且有趣的技术以及使用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;
};
}
问题:
是否可以使用组合中的一个或多个类来实现完整的 REST 兼容解决方案java.util.function?我只能写出以上那些。我对以下模式特别感兴趣:
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 而不是 REST。
有没有办法识别 URL 参数?
GET /books?sort=name
回首忆惘然
相关分类