猿问

如何使用 Spring Cloud Function 将函数映射到符合 REST 的端点

我遇到了不寻常且有趣的技术以及使用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


慕勒3428872
浏览 157回答 1
1回答

回首忆惘然

这种方式在他们的官方文档或博客文章中都没有明确说明。我不能肯定地说它是为这种用例设计的。无论如何,在文档的一部分中。提到以下内容:函数也可以是 Flux 或 Flux,Spring Cloud Function 负责将数据与所需类型进行相互转换,只要它以纯文本或(在 POJO 的情况下)JSON 形式出现。还支持从传入事件复制消息标头的消息,具体取决于适配器。Web Adaptor 还支持从表单编码数据到 Map 的转换,如果您将此功能与 Spring Cloud Stream 一起使用,则消息有效负载的所有转换和强制转换功能也将适用。消息可以接受输入和输出,并且它还(如文档中所述)能够对数据进行编码以映射到可以存储查询参数或标头参数的位置。
随时随地看视频慕课网APP

相关分类

Java
我要回答