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 what
s 错误....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 subscribe() 通知 在非阻塞范围内调用“订阅”更少...(Ctrl+F1)检查信息:返回发布者类型(发布者、通量、单声道)的方法不应调用订阅直接方法,因为它可以打破反应式调用链。不要使用订阅,而是考虑使用组合运算符,如 flatMap、zip、then 等 我不想返回用户,只返回我自定义的地图,用户插入到mongodb中以上是关于spring5 webflux,如何返回自定义json数据?的主要内容,如果未能解决你的问题,请参考以下文章