Jeśli chcesz mieć raka to
W Spingu możesz sobie wstrzyknąć takie pole :
private @Autowired HttpServletRequest request;
I tam bedziesz mał wszystko z request. Wygląda prosto, ale boli całe życie.
Alternatywą (mniej zagrożoną nowotworami) jest np. nowy kawałek Spring 5 gdzie z wykorzystaniem funkcyjnego WebFlux możesz napisać POST tak:
[...]
//definicja routingu
private void serve() {
RouterFunction route = nest(path("/api"),
route(GET("/time"), renderTime())
.andRoute(GET("/messages"), renderMessages())
.andRoute(POST("/messages").and(contentType(APPLICATION_JSON)), postMessage()));
}
[...]
//metoda post
private HandlerFunction<ServerResponse> postMessage() {
return request -> {
final List<Message> messages = new ArrayList<>();
Mono<Message> message = request.bodyToMono(Message.class); ///tu sobie sam możesz wstawić własny sposób konwersji
final Mono<ServerResponse> res= message.flatMap( m-> {
messages.add(m);
return ServerResponse.ok()
.contentType(APPLICATION_JSON)
.body(fromObject(messages));
} );
return res;
};
}
```
(albo update sla @Shalom, @karolinaa - jak wygląda na gotowo taka metoda):
```
private HandlerFunction<ServerResponse> postMessage() {
return request -> {
request.bodyToMono(Message.class)
.flatMap( message ->
messagesOrErrorFromTopic(service.addMessageToTopic(request.pathVariable("topic"), message));
);
};
}
```
https://docs.spring.io/spring/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/html/web-reactive.html#web-reactive-server-functional