RxJava 和 Spring MVC (译)
来源:互联网 发布:小七网络毛毯中学 编辑:程序博客网 时间:2024/06/04 18:48
RxJava with Spring MVC
Spring Cloud Netflix引入了Rxjava
RxJava是一个Reactive Extensions的Java VM实现:它是一个使用可观察数据流进行异步编程的编程接口,ReactiveX结合了观察者模式、迭代器模式和函数式编程的精华,与异步数据流交互的编程范式。
Spring Cloud Netflix提供并支持从Spring MVC Controllers返回rx.Single对象. 它还支持使用 rx.Observable 对象,可观察的对象为 Server-sent events (SSE). 如果你的内部api已经使用RxJava这会非常的方便(可以查看spring-cloud-feign-hystrix为例)。
这里有一些使用rx.Single的列子:
@RequestMapping(method = RequestMethod.GET, value = "/single")public Single<String> single() { return Single.just("single value");}@RequestMapping(method = RequestMethod.GET, value = "/singleWithResponse")public ResponseEntity<Single<String>> singleWithResponse() { return new ResponseEntity<>(Single.just("single value"), HttpStatus.NOT_FOUND);}@RequestMapping(method = RequestMethod.GET, value = "/singleCreatedWithResponse")public Single<ResponseEntity<String>> singleOuterWithResponse() { return Single.just(new ResponseEntity<>("single value", HttpStatus.CREATED));}@RequestMapping(method = RequestMethod.GET, value = "/throw")public Single<Object> error() { return Single.error(new RuntimeException("Unexpected"));}
如果你使用 Observable, 而不Single, 你可以使用.toSingle() 或 .toList().toSingle(). 下面是些例子:
@RequestMapping(method = RequestMethod.GET, value = "/single")public Single<String> single() { return Observable.just("single value").toSingle();}@RequestMapping(method = RequestMethod.GET, value = "/multiple")public Single<List<String>> multiple() { return Observable.just("multiple", "values").toList().toSingle();}@RequestMapping(method = RequestMethod.GET, value = "/responseWithObservable")public ResponseEntity<Single<String>> responseWithObservable() { Observable<String> observable = Observable.just("single value"); HttpHeaders headers = new HttpHeaders(); headers.setContentType(APPLICATION_JSON_UTF8); return new ResponseEntity<>(observable.toSingle(), headers, HttpStatus.CREATED);}@RequestMapping(method = RequestMethod.GET, value = "/timeout")public Observable<String> timeout() { return Observable.timer(1, TimeUnit.MINUTES).map(new Func1<Long, String>() { @Override public String call(Long aLong) { return "single value"; } });}
如果你有一个流端点和客户端,SSE可能是一个选项。使用 RxResponse.sse()将rx.Observable转换到Spring 的SseEmitter. 以下是一些例子:
@RequestMapping(method = RequestMethod.GET, value = "/sse")public SseEmitter single() { return RxResponse.sse(Observable.just("single value"));}@RequestMapping(method = RequestMethod.GET, value = "/messages")public SseEmitter messages() { return RxResponse.sse(Observable.just("message 1", "message 2", "message 3"));}@RequestMapping(method = RequestMethod.GET, value = "/events")public SseEmitter event() { return RxResponse.sse(APPLICATION_JSON_UTF8, Observable.just(new EventDto("Spring io", getDate(2016, 5, 19)), new EventDto("SpringOnePlatform", getDate(2016, 8, 1))));}
0 0
- RxJava 和 Spring MVC (译)
- Struts MVC 和 spring MVC
- Spring MVC和Struts2
- Spring MVC和Struts2
- spring和spring MVC整合
- 简述spring mvc 和spring
- Spring MVC 和 Spring 总结
- Spring MVC 和 Spring 总结
- Spring MVC 和 Spring 总结
- Spring MVC 和 Spring 总结
- Spring MVC 和 Spring 总结
- Spring MVC 和 Spring 总结
- Spring和spring MVC,spring MVC和Strut2的区别
- Spring MVC和Struts2 MVC的区别
- spring mvc 和struct mvc 的区别
- Spring MVC 和 struts MVC的区别。
- 【spring mvc(二)】spring mvc使用属性文件配置c3p0和dbcp数据源
- RxJava 和 RxAndroid (一)
- 遇到的查不到的异常
- 使用Redis之前5个必须了解的事情
- hive内部表与外部表区别详细介绍
- 【数据库】MySql提示:The server quit without updating PID file(…)失败
- android Animation
- RxJava 和 Spring MVC (译)
- IOS UIlabel自适应Fram后顶部出现灰色横线
- 教你理解复杂的C-C++声明
- Android数据存储和访问-登录记住密码功能
- Android事件分发机制完全解析,带你从源码的角度彻底理解
- 哈夫曼编码树的C++实现
- jquery.seat-chartsMark在线选座插件使用
- java 初探(四)
- 用指针参数去申请内存