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

WebClient Spring Boot:仅当数据返回值时才保存数据

况安然
2023-03-14

当我返回值时,我使用Mailchimp api,它工作正常,但当我不返回任何值时,它不工作,也不会引发任何异常。

@GetMapping(value = "/members/add/{email}") //using GET to test
public Mono<String> addMember(@PathVariable String email) {
    User user = new User();
    user.setFirst_name("Test");
    user.setLast_name("Data");
    user.setEmail_id(email);
    return mailchimpService.create(user);
}

这不是保存数据

@GetMapping(value = "/members/add/{email}") //using GET to test
    public Mono<String> addMember(@PathVariable String email) {
        User user = new User();
        user.setFirst_name("Test");
        user.setLast_name("Data");
        user.setPhone("");
        user.setEmail_id(email);
        mailchimpService.create(user);

        return null;
    }

public Mono<String> create(User user) {
        try {
            Members members = convertUserToMailchimpObject(user);
            return webClient.post()
                    .contentType(MediaType.APPLICATION_JSON)
                    .body(BodyInserters.fromValue(members))
                    .exchangeToMono(clientResponse -> {
                        if (clientResponse.statusCode().is5xxServerError()) {
                            clientResponse.body((clientHttpResponse, context) -> clientHttpResponse.getBody());
                            System.out.println(clientResponse.statusCode() + " statusCode error");
                            System.out.println(clientResponse.statusCode().value() + " value error");
                            return clientResponse.bodyToMono(String.class);
                        } else
                            System.out.println(clientResponse.statusCode() + " statusCode");
                        System.out.println(clientResponse.statusCode().value() + " value");
                        return clientResponse.bodyToMono(String.class);
                    });
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

共有1个答案

松增
2023-03-14

原因是在反应式编程中,除非您订阅,否则不会发生任何事情。create方法永远不会被订阅,因此永远不会进行webclient调用。

第一个代码段是有效的,因为只要您提供发布者(Mono),Webflux框架就会为您订阅。

 类似资料:
  • 问题内容: 我有2张桌子- : 第二张桌子- : 我只需要选择未取消的预订(在此示例中仅为ID 3)。我可以轻松地选择带有简单条件的已取消,但由于未在此处取消工作,因此我在努力避免未取消。 问题答案: 要么: 第一个版本更直观,但是我认为第二个版本通常可以获得更好的性能(假设您在联接中使用的列上有索引)。 第二个版本有效,因为返回第一个表中所有行的一行。当条件成功,这些行会包括从第二表中的列,就像

  • 问题内容: 我希望Hibernate制作数据库文件(SQLite),但前提是不存在。 现在在hibernate.cfg.xml中,有以下一行: 问题是数据库文件一直在创建,即使该文件存在也是如此。 问题答案: 尝试将值切换为

  • 我在Excel中有下面的测试表。我希望能够使用公式(如果可以,也可以使用另一个),它只会在单元格DATE1和DATE2匹配时返回行。 我无法将日期直接输入到公式中,因为日期可以是3年前的任何范围。任何帮助将不胜感激。

  • 我试图通过使用基于索引的行位置简单地获得df的子集。但是,出于某些原因,以下代码有时返回空数据帧: dist数据帧(帧是索引): 输出: 我一辈子都不明白为什么会发生这种事。

  • 问题内容: 我正在尝试使用hibernate将数据插入数据库。这是我要执行的动作 但这给我一个错误的说法 线程“主”中的异常org.hibernate.TransientPropertyValueException:非null属性引用了一个瞬态值- 必须在当前操作之前保存瞬态实例 这是我的学生详细信息实体 我的学生详细信息hbm.xml 我的主题实体看起来像 Subject.hbm.xml 这是S

  • 问题内容: 这只是给我最后一个字符(数字),但我需要整个数字字符串 结果:3 期望值:123 这给了我相同的结果,但是我需要它返回一个空白值: 结果:3 期望: 注意:Postgres 7.4 有用的链接:http : //www.postgresql.org/docs/7.4/static/functions- matching.html 更新: 两者现在都返回:123 仍然需要跳过或返回以下字