与SpringMVC在实现Controller时有较大差异,其他方面基本一致。
给TestRouter标注 RestController 注解并创建一下两个方法
映射方法
@Bean
public RouterFunction<ServerResponse> routers() {
return RouterFunctions.route()
.GET("/test", this::test).build();
}
处理请求
private Mono<ServerResponse> test(ServerRequest request) {
//获取请求头
Map<String, String> headers = request.headers()
.asHttpHeaders()
.toSingleValueMap();
//获取restful的路径参数
Map<String, String> map = request.pathVariables();
String pathName = request.pathVariable("name");
//获取路径参数
MultiValueMap<String, String> params = request.queryParams();
String name = request.queryParam("name").get();
//获取并消费请求体
User body = request.bodyToMono(User.class).block();
//获取表单数据
Mono<MultiValueMap<String, String>> formData = request.exchange().getFormData();
//获取文件上传相关数据
Mono<MultiValueMap<String, Part>> multipartData = request.exchange().getMultipartData();
//获取Session
Mono<WebSession> session = request.exchange().getSession();
//消费body
return request.bodyToMono(User.class)
.flatMap(user -> ServerResponse.ok()
.bodyValue(user));
}