spring5 webflux,如何返回自定义json数据?

Posted

技术标签:

【中文标题】spring5 webflux,如何返回自定义json数据?【英文标题】:spring5 webflux, how to return custom json data? 【发布时间】: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 【参考方案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中

以上是关于spring5 webflux,如何返回自定义json数据?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Reactive WebFlux - 如何自定义 BadRequest 错误消息

如何从 WebFlux 客户端正确排出/释放响应体?

如何使用 spring webflux 读取请求正文

spring5 webflux测试

Spring5---新特性(WebFlux)

Webflux WebClient中如何自定义异常?