`

SpringBoot-第十五章 高级篇幅之SpringBoot2.0响应式编程

阅读更多

 

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

 

public class User {
    public User(String id,String name)
    {
        this.id=id;
        this.name=name;
    }
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

@Service
public class UserService {
    private static final Map<String,User> userMap = new HashMap<String,User>();
    static
{
        userMap.put("1",new User("a1","kevin1"));
        userMap.put("2",new User("a2","kevin2"));
        userMap.put("3",new User("a3","kevin3"));
        userMap.put("4",new User("a4","kevin4"));
        userMap.put("5",new User("a5","kevin5"));
    }

    public Flux<User> list()
    {
       return Flux.fromIterable(userMap.values()).delayElements(Duration.ofSeconds(1));
    }
    public Mono<User> findById(String id)
    {
        return Mono.justOrEmpty(userMap.get(id));
    }
    public Mono<User> del(String id)
    {
        return Mono.justOrEmpty(userMap.remove(id));
    }

}
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
private UserService userService;
    @RequestMapping(value = "/list",produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
    public Flux<User> list()
    {
        return userService.list();
    }
    @RequestMapping("/find")
    public Mono<User> findById(String id)
    {
        return userService.findById(id);
    }
    @RequestMapping("/del")
    public Mono<User> del(String id)
    {
        return userService.del(id);
    }
}

 

public class WebClientTest {
    @Test
public void test()
    {
        Flux<String> userFlux = WebClient.create().get().
                uri("http://localhost:8080/user/list").
                accept(MediaType.APPLICATION_STREAM_JSON).retrieve().bodyToFlux(String.class);
        System.out.println(userFlux.blockLast());
    }

    @Test
public void test1()
    {
        Mono<String> userMono = WebClient.create().get().
                uri("http://localhost:8080/user/find?id={id}",1).
                accept(MediaType.APPLICATION_JSON).retrieve().bodyToMono(String.class);
        System.out.println(userMono.block());
    }
}

 

 

 

 

分享到:
评论

相关推荐

    springboot-rabbitmq.rar

    于rabbitmq的基本概念和相关的理论这里就不做过多介绍了,在之前的篇幅中有过相应的介绍,也可以查询一些资料详细了解一下rabbitmq的基础知识,下面要介绍的点主要包括两个方面, 1、rabbitmq的消息确认机制; 2、...

    《RxJava响应式编程》_李衍顺.zip 提取码: 2bsV75

    RsJava 响应式编程, 高清带目录. 响应式编程是一种基于异步数据流概念的编程模式。在开发手机 App、 Web App 时, 要想保证对用户 请求的实时响应,给用户带来流畅的体验,响应式编程是一个不错的选择, RxJava 则是...

    SpringBoot的招聘网站系统.zip

    SpringBoot的招聘网站系统

    SpringBoot项目模版

    SpringBoot项目模版

    基于SSM/Springboot的商城项目源码

    后端: SpringBoot Swagger Docker(docker需自己搭建docker环境) 前端: JSP 数据库:MySQL 技术语言 jdk 1.8 开发平台 Idea 2018 +win10 运行环境 Linux/Windows 毕业设计基于SSM/Springboot的商城项目,一个简单...

    C语言高级程序员编程指南

    第十五章 C++入门 第十六章 对象 第十七章 常见类函数 第十八章 用C++输入输出 基本上这本书对于初学者来说是比较好的,因为比较全面而且分得比较细又有相关方面的展开,每个点上都有相应的实例,这个对...

    软件创富密码:iPhone应用程序开发攻略之深入浅出Objective-C2.0分卷二

    iPhone应用程序开发攻略之深入浅出Objective-C2.0(适用于ios4)》系统地介绍了关于使用Objective-C2.0开发iPhone应用程序的基础知识,涵盖各种开发工具的操作技巧、框架(Framework)内部的工作原理、软件的调式技巧...

    软件创富密码:iPhone应用程序开发攻略之深入浅出Objective-C2.0分卷一

    iPhone应用程序开发攻略之深入浅出Objective-C2.0(适用于ios4)》系统地介绍了关于使用Objective-C2.0开发iPhone应用程序的基础知识,涵盖各种开发工具的操作技巧、框架(Framework)内部的工作原理、软件的调式技巧...

    SpringBoot公开招聘系统外网站.zip

    SpringBoot公开招聘系统外网站.zip

    Cascading Style Sheet 2.0 中文手册.chm

    ADO.chm ...限于篇幅,对于一些过于繁杂的相关内容,如动态样式属性(Dynamic Properties),滤镜(Filters),行为(Behaviors)请参阅我的其它相关著作。 本书中涉及到的所有HTML对象(Object,E

    基于SpringBoot实现商城项目源码包含数据库脚本文件

    基于SpringBoot实现商城项目源码包含数据库脚本文件

    【SpringBoot多模块项目】学生宿舍管理系统.zip

    项目采用SpringBoot +Maven多模块开发,数据库使用mysql,数据库脚本文件在dorm-web/src/main/resources/sql文件夹中。可以自己部署到IDEA开发工具中运行。

    CSS 2.0 样式表中文手册.rar

    本手册针对的是已有一定网页设计制作经验的读者。其目的是提供完整清晰的... 限于篇幅,对于一些过于繁杂的相关内容,如动态样式属性(Dynamic Properties),滤镜(Filters),行为(Behaviors)请参阅我的其它相关著作。

    Windows 7高级编程

    通常,每章涉及一个专题或是一类专题(例如Taskbar编程技术)。如果某个专题或某类专题跨越多章,通常靠前章节内容较简单,靠后章节需要熟悉一些编程技能才能理解。本书还要用到一些第三方库文件,如何使用这些库文件...

    SpringBoot人力资源管理系统

    人力资源管理系统 专为人力资源外包企业打造的行业智能解决方案,本系统致力于解决简历利用率低,维护困难等行业痛点。我们的目标就是让简历得到充分利用,重复利用。核心功能包括角色(招聘专员,招聘组长,管理员...

    springboot宠物医院管理系统

    springboot宠物医院管理系统

    [springboot项目源码]天气预报系统.zip

    [springboot项目源码]天气预报系统

    SpringBoot博客后台管理系统

    SpringBoot博客后台管理系统

    《编码的奥秘》电子书

    25第7章 十进制记数法 30第8章 其他进位制记数法 36第9章 二进制数 48第10章 逻辑与开关 61第11章 逻辑门电路 73第12章 二进制加法机 94第13章 如何实现减法 103第14章 反馈与触发器 112第15章 字节与十六进制 131第...

    Scott Mitchell 的ASP.NET 2.0数据教程

    本文是研究在ASP.NET 2.0中实现这些常见的数据访问模式之技术的长篇系列教程的第一篇。我们将从创建一个软件框架开始,这个框架的组成部分包括一个使用强类型的DataSet的数据访问层(DAL),一个实施用户定义的业务...

Global site tag (gtag.js) - Google Analytics