处理请求时如何获取Router定义的Attribute属性?
获取Spring WebFlux路由属性的方法
你可以通过两种常见方式获取路由上定义的id属性:
方式一:使用ServerRequest的attribute方法(响应式风格)
该方法返回Mono<Optional<Object>>,适合保持响应式调用链:
public Mono<ServerResponse> handle(ServerRequest serverRequest) { // 获取"id"属性,若不存在则返回404 return serverRequest.attribute("id") .map(id -> ServerResponse.ok().bodyValue("获取到的id属性值:" + id)) .defaultIfEmpty(ServerResponse.notFound().build()); }
方式二:通过ServerWebExchange直接获取
从ServerRequest拿到ServerWebExchange后,可直接操作属性集合:
public Mono<ServerResponse> handle(ServerRequest serverRequest) { ServerWebExchange exchange = serverRequest.exchange(); // 直接获取属性,不存在时返回null String id = (String) exchange.getAttribute("id"); // 或者使用getAttributeOrDefault设置默认值,避免空指针 String safeId = exchange.getAttributeOrDefault("id", "默认值"); return ServerResponse.ok().bodyValue("获取到的id属性值:" + safeId); }
说明
路由上通过.withAttribute("id", "demo")设置的属性,会被存入请求对应的ServerWebExchange属性集合中,因此上述两种方式都能正确获取到属性值。若属性可能不存在,推荐使用方式一的响应式处理,或方式二中的getAttributeOrDefault来避免空指针问题。
内容的提问来源于stack exchange,提问作者dengshaolin
相关产品推荐
相关产品推荐

