-
Notifications
You must be signed in to change notification settings - Fork 0
/
MessageHandler.java
37 lines (29 loc) · 1.43 KB
/
MessageHandler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package demo;
import am.ik.yavi.core.ConstraintViolations;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import static org.springframework.web.reactive.function.server.RouterFunctions.route;
import static org.springframework.web.reactive.function.server.ServerResponse.badRequest;
import static org.springframework.web.reactive.function.server.ServerResponse.ok;
public class MessageHandler {
private final List<Message> messages = new CopyOnWriteArrayList<>();
public RouterFunction<ServerResponse> routes() {
return route()
.GET("/messages", this::getMessages)
.POST("/messages", this::postMessage)
.build();
}
Mono<ServerResponse> getMessages(ServerRequest req) {
return ok().syncBody(this.messages);
}
Mono<ServerResponse> postMessage(ServerRequest req) {
return req.bodyToMono(Message.class)
.flatMap(b -> Message.validator.validateToEither(b)
.bimap(ConstraintViolations::details, this.messages::add)
.fold(v -> badRequest().syncBody(v), body -> ok().syncBody(b)));
}
}