Spring 框架 WebFlux 响应式编程

Spring Framework WebFlux Reactive Programming

我正在尝试将对象发送到端点,但我不明白为什么我不能使用 .get() 来完成,为什么必须使用 .post()?如果端点方法接受一个对象并对其执行某些操作,而 returns 一个对象怎么办?我可能想将一个对象发送到将对象作为参数的端点。有办法吗?如何将客户对象传递给 getCustomer() 端点。

WebClient.create("http://localhost:8080")
            .get()//why this can not be used? why post has to be used?
            .uri("client/getCustomer")
            .contentType(MediaType.APPLICATION_JSON)
            .bodyValue(customer)//with .get() body cannot be passed.
            .retrieve()
            .bodyToMono(Customer.class);


        @GET
        @Path("/getCustomer")
        @Produces(MediaType.APPLICATION_JSON)
        @Consumes(MediaType.APPLICATION_JSON)
        public Customer getCustomer(Customer customer) {
            //do something
            return customer;
        }

已编辑

In GET methods, the data is sent in the URL. just like: http://www.test.com/users/1

In POST methods, The data is stored in the request body of the HTTP request.

因此我们不应期望 .get() 方法具有 .bodyValue()。

现在如果你想使用 GET 方法发送数据,你应该在 URL 中发送它们,就像下面的片段

   WebClient.create("http://localhost:8080")
            .get()
            .uri("client/getCustomer/{customerName}" , "testName")
            .retrieve()
            .bodyToMono(Customer.class);

有用Spring webClient 示例:

spring 5 WebClient and WebTestClient Tutorial with Examples

有关 POST 和 GET

的更多信息

HTTP Request Methods