当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring云函数将函数映射到符合REST的endpoint

浦墨竹
2023-03-14

我遇到过一些不同寻常且有趣的技术,以及使用Spring云函数拆分业务和技术实现的方法,该函数支持java的实现。util。函数类充当endpoint

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>

简而言之,有一个简单的静态列表

private final static List<Book> books = Arrays.asList(
    new Book(1, "One"),
    new Book(2, "Two"),
    new Book(3, "Three"));    

下面的Bean根据方法名称及其返回类型启用指定的endpoint:

// 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中的一个或多个类来实现完全兼容REST的解决方案。util。功能组合?我只能写上面的那些。我对以下模式特别感兴趣:

    GET       /books
    GET       /books/1
    POST      /books
    PUT/PATCH /books/1
    DELETE    /books/1
    GET       /books/1/chapters/2/paragraphs/3
    

    如何避免endpoint的方法名称冲突,因为所有方法似乎都必须遵循空参数签名的规则,否则无法自动编辑。我从https://www.baeldung.com/spring-cloud-function看起来更像RPC而不是REST。

    有没有办法识别URL参数?

    GET       /books?sort=name
    
  • 共有1个答案

    皇甫飞光
    2023-03-14

    这种方式在他们的官方文件或博客中都没有明确说明。我不能肯定它是为这样的用例设计的。

    不管怎样,在文件的一部分。提到以下内容:

    函数也可以是Flux或Flux,Spring云函数负责将数据转换为所需类型或从所需类型转换数据,只要数据以纯文本或(在POJO的情况下)JSON的形式提供。还支持从传入事件复制消息头的消息,具体取决于适配器。web适配器还支持从html" target="_blank">表单编码数据到映射的转换,如果您将此功能用于Spring Cloud Stream,那么消息有效负载的所有转换和强制功能也将适用。

    消息可以接受输入和输出,它还具有(如文档中所述)编码数据以映射您可以存储查询参数或标头参数的位置的能力。

    这里是GitHub项目和官方文档

     类似资料:
    • 问题内容: 当前,我有一堆实现接口的Java类,这意味着它们都具有方法。这个想法是,每个类都有几个(例如<10)成员,并且每个类都通过方法映射到该类中的方法,如下所示: 你明白了。 这对我来说很好,但是现在我需要一个从键到函数的运行时可访问的映射。并非每个函数 实际上都 返回一个String(有些返回void),并且我需要动态地访问每个具有键的类中每个函数的返回类型(使用反射)。我已经有一位经理,

    • 我有以下Haskell表达式: 而我也有下面的表达: 我正试图弄清楚上面是否等同于第一个表达式。然而,当我在GHCI中尝试上面的表达式时,我得到了一个错误: 我不知道为什么这个表达不起作用。既然使用了函数组合,那么表达式的计算值不应该是:

    • 我有一个 pyspark df,它有很多列,但子集看起来像这样: 我想映射一个函数some_func(),它只使用列“lat”、“lon”和“event_id”来返回一个布尔值,该值将作为名为“验证”的单独列添加到df中。基本上,我需要单独检索函数中感兴趣的列并对它们进行操作。我知道我可以使用UDF或df.withColumn(),但它们用于映射到单列。为此,我需要将感兴趣的列连接为一列,这会使代

    • flatMap 遍历所有的元素,为每一个创建一个集合,最后把所有的集合放在一个集合中。 assertEquals(listOf(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7), list.flatMap { listOf(it, it + 1) }) groupBy 返回一个根据给定函数分组后的map。 assertEquals(mapOf("odd" to listOf(

    • 接受一个可变参数函数并返回一个闭包,该闭包接受一个参数数组映射到该函数的输入。 使用闭包和展开运算符 (...) 将参数数组映射到函数的输入。 const spreadOver = fn => argsArr => fn(...argsArr); const arrayMax = spreadOver(Math.max); arrayMax([1, 2, 3]); // 3

    • 我对流图法有点困惑。有一些简单的源代码可以运行: map()签名:Stream map(函数 在我的选择中,我认为赋予文字的功能。stream()。map应该有1个参数,但是string::length没有任何输入参数,只返回int。 它看起来像word流调用字符串中的每个元素“word”。长度(),但我不知道该怎么做?为什么string::length签名不需要与函数签名(R apply(T))