hugo-book-theme/exampleSite/content/docs/rx-jersey-server.md

65 lines
1.9 KiB
Markdown
Raw Normal View History

2018-09-30 01:31:24 +02:00
## Jersey Server
Register `RxJerseyServerFeature` in `resourceConfig`
```java
resourceConfig.register(RxJerseyServerFeature.class);
```
Or with configuration
```java
RxJerseyServerFeature rxJerseyServerFeature = new RxJerseyServerFeature()
.register(AuthInterceptor.class);
resourceConfig.register(rxJerseyServerFeature);
```
Update your resource adding rx return type:
```java
@Path("/")
public class HelloResource {
@GET
public Single<HelloEntity> getAsync() {
return Single.just(new HelloEntity());
}
public static class HelloEntity {
public String hello = "world";
}
}
```
## Inteceptor
You can use RxJava enabled interceptors. Result of such interceptor will be ignored. Thrown or returned error would be redirected to jersey.
#### RxJava
```java
public class SimpleInterceptor implements ObservableRequestInterceptor<Void> {
public Observable<Void> intercept(ContainerRequestContext requestContext) {
return Observable.empty();
}
}
```
#### RxJava 2
```java
public class SimpleInterceptor implements CompletableRequestInterceptor {
public Completable intercept(ContainerRequestContext requestContext) {
return Observable.complete();
}
}
```
## Important notes
#### RxJava
- It's recommended to use `rx.Single` as return type (Representing single response entity).
- Multiple elements emitted in `Observable` will be treated as error.
- Empty `Observable` or `null` value in `Observable` or `Single` will be treated as `204: No content`.
- `Completable` will be executed and `204: No content` will be returned.
#### RxJava 2
- It's recommended to use `io.reactivex.Maybe` which could be 0 or 1 item or an error.
- Multiple elements emitted in `Observable` or `Flowable` will be treated as error.
- Empty `Observable`/`Maybe` will be treated as `204: No content`.
- `Completable` will be executed and `204: No content` will be returned.