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

如何在spring boot webflux上从mono获取用户名?

古扬
2023-03-14

我尝试使处理程序和路由器类的Spring引导webflow。模型类是用户类。代码是

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Document(collection="Users") 
public class User {

    @Id 
    private String _id;

    @Indexed(unique = true) 
    private Long id; 

    @Indexed(unique=true)  
    private String username;

    private String password;

    private String email;

    private String fullname;

    private String role;
}

下面是webflux项目的处理程序类。在register方法中,我编写了id复制测试代码。但这是完全错误的。

@Component
public class UserHandler {

    @Autowired
    private UserReactiveMongoRepository userRepository;

    public Mono<ServerResponse> register(ServerRequest request) {
        Mono<User> monoUser = request.bodyToMono(User.class);
        String id = monoUser.map(u -> u.get_id()).toString();

        if(userRepository.existsById(id) == null)
            return ServerResponse.ok().build(userRepository.insert(monoUser));

        return ServerResponse.ok().build();
    }
}

我想提取的用户名或id字符串从Mono的Spring webflow.将需要任何评论。我被这部分卡住了。

共有2个答案

太叔天宇
2023-03-14

一个更干净的方法是(我不喜欢别人在map中返回null)使用doOn成功

request.bodyToMono(User.class)
    .doOnSuccess(user -> return userRepository.insert(user))
    .map(user -> ServerResponse.ok(user))

我遗漏了任何错误检查,但ofc应该正确进行。

白学
2023-03-14

这里的一个错误是这样的stringid=monoUser。地图(u)-

还有一件事,您不应该在函数体中使用请求的数据,而应该在map或flatMap函数中使用。

你可以用这样的东西来代替它(我是按头来做的,所以它可能不是100%语法corect):

Mono<User> userMono = request.bodyToMono(User.class);//Create a Mono<User>

userMono.map((user) -> { //In the map method, we access to the User object directly
  if(user != null && user.getId() != null){
    return userRepository.insert(user); // Insert User instead of Mono<User> in your repository
  }
  return null;
}) //This is still a Mono<User>
.map(insertedUser -> ServerResponse.ok(insertedUser)) //This is a Mono<ServerResponse>
.switchIfEmpty(ServerResponse.ok());

希望这有帮助!

 类似资料:
  • 我有一个接受Mono作为参数的方法。我只想从中得到实际的字符串。Googled但是除了调用Mono对象上的block(),没有找到答案,但是它会进行阻塞调用,所以要避免使用block()。如果可能的话,请建议其他方法。我之所以需要这个字符串,是因为在这个方法中,我需要用实际的字符串值调用另一个方法,比如print()。我明白这很容易,但我是反应性编程的新手。 代码:

  • 我一直在使用Tweepy通过流媒体API收集某个地区的推文,我只收集了一条推文的纬度/经度,但我想添加更多,我不确定具体是什么。我使用这段代码来获取lat/long值: 我想把具体的用户名(@handle)和Tweet创建的时间打印到文本文件中。我不确定是否应该在< code > if decoded . get(' coordinates ',None)not None:循环中这样做。

  • 问题内容: 我的Android应用程序中有一个Facebook登录选项,但尝试获取用户的电子邮件失败。在用户登录并添加到Parse.com用户表(具有有效的访问令牌)之后,我请求Facebook用户信息,但仅获取其ID和名称(即使电子邮件已设置为权限之一) )。 这是我的代码(在我的按钮的OnClickListener内部): 问题答案: 我想这与Graph API v2.4中的更改有关,该更改使

  • 问题内容: 如何从用户进行pygame打印输入: 我试图让用户键入一些内容,然后pygame将其打印在屏幕上。 这是我当前的程序: 我想要这样,当用户点击Enter时,它将清空屏幕。 帮我! 问题答案: 这是一个示例脚本,可将输入切换到屏幕。它显示了如何在遍历pygame事件队列时修改字符串。每帧都将清除屏幕,并重建名称表面并使其变白。 这是要点版本

  • 所以我要做的是让我的Java找到windows用来登录的用户名,所以当我说这样的方法时,它会返回用户名,就像我在名为Noah的用户中使用它一样,Java会返回“Noah”,如果我在用户Amanda上,Java会返回“Amanda”。我该怎么做?

  • 我一直在寻找一种使用spring ldapTemplate通过LDAP验证用户名的方法。 我的搜索结果是 但我想知道我需要在contextMapper或attributeMapper中添加什么。据我所知,它用于将数据映射到对象。但我不需要这个东西。我只想知道布尔值是否存在。 我的属性示例: 我的模板包含url、用户名和密码,连接已经建立。 我需要一些帮助,因为我不确定使用搜索方法是否正确。 我已使