【问题标题】:spring5 webflux, how to return custom json data?spring5 webflux,如何返回自定义json数据?
【发布时间】:2019-03-20 03:16:54
【问题描述】:

当我不使用 webflux 时,我的代码

1.public Map<String, Object> registerService(User user) {
    Map<String, Object> map = new HashMap<>(8);
    map.put("status":1);
    userRepository.save(user);
    return map;

当我使用 webflux 时,我的代码

2.public Mono<Map<String, Object>> registerService(User user) {
    Map<String, Object> map = new HashMap<>(8);
    map.put("status", 1);
    userRepository.save(user);
    return Mono.just(map);
}

和 2. 响应是 "{"status":1}",但用户不要插入 mongo

在 webflux 中,我无法得到与 1. 相同的响应,那么该怎么做呢?

我不想返回用户,只返回我自定义的地图,用户插入到mongodb中

【问题讨论】:

  • 那么你的 userRepository.save() 是做什么的?
  • 将用户插入mongo

标签: java spring spring-mvc spring-boot spring-webflux


【解决方案1】:

假设您的用户存储库返回类型也是 Mono,并且您想返回自定义地图,您可以这样做

public Mono<Map<String, Object>> registerService(User user) {
    return userRepository.save(user)
        .map(__ -> {
            Map<String, Object> map = new HashMap<>();
            map.put("status", 1);
            return map;
        });
}

在上面的代码中,您并没有破坏反应链,而是按照您的意愿返回您的自定义地图。

【讨论】:

  • 嗨,朋友,非常感谢。我尝试使用您的代码,但是当我调用 registerService() 时,用户返回 null,我真的不知道t know whats 错误....user={"username":"admin","password":"123456" }....mongodb 返回我的用户为空
  • request_data : {"username":"admin","password":"123456"} 响应:“无法实例化 [com.reactive.entity.User]:构造函数抛出异常;嵌套异常是java.lang.NullPointerException: 用户名被标记为@NonNull 但为空"
  • @LceMan 这是不同的东西,与此问题中描述的问题无关。
【解决方案2】:

您必须订阅 Mono,userRepository.save(obj).subscribe()

【讨论】:

  • public Mono> registerService(User user) { Map map = new HashMap(8); map.put("状态", 1); userRepository.save(user).subscribe();返回 Mono.just(map); }
  • subscribe() 通知 在非阻塞范围内调用“订阅”更少...(Ctrl+F1)检查信息:返回发布者类型(发布者、通量、单声道)的方法不应调用订阅直接方法,因为它可以打破反应式调用链。不要使用订阅,而是考虑使用组合运算符,如 flatMap、zip、then 等
  • 我不想返回用户,只返回我自定义的地图,用户插入到mongodb中
猜你喜欢
  • 2020-03-14
  • 2015-04-11
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
相关资源
最近更新 更多