SpringWebFlux使用函数式编程之Filtering
环境:Springboot2。4。12
本篇主要内容:RouterFunction中使用过滤器URL处理组件
请先阅读:《SpringWebFlux使用函数式编程之HandlerFunction(1)》《SpringWebFlux使用函数式编程之RouterFunction(2)》概述
你可以通过在路由函数构建器上使用before、after或filter方法来筛选处理程序函数。通过使用注释,你可以通过使用ControllerAdvice、ServletFilter或两者都可以实现类似的功能。过滤器将应用于构建器构建的所有路由。这意味着在嵌套路由中定义的过滤器不适用于顶级路由。例如,考虑下面的例子:RouterFunctionServerResponserouteroute()。path(person,b1b1。nest(accept(APPLICATIONJSON),b2b2。GET({id},handler::getPerson)。GET(,handler::listPeople)。before(requestServerRequest。from(request)1。header(XRequestHeader,Value)。build()))。POST(person,handler::createPerson))。after((request,response)logResponse(response))2。build();添加自定义请求头的before过滤器只应用于两个GET路由。记录响应的after过滤器应用于所有路由,包括嵌套路由。
路由器构建器上的filter方法接受HandlerFilterFunction:一个接受ServerRequest和HandlerFunction并返回ServerResponse的函数。处理程序函数参数表示链中的下一个元素。这通常是路由到的处理程序,但如果应用了多个过滤器,它也可以是另一个过滤器。完整示例
处理程序句柄ComponentpublicclassPersonHandler{publicServerResponsequeryPerson(ServerRequestrequest)throwsException{System。out。println(request。headers()。header(xpack));returnok()。body(newPerson(Integer。valueOf(request。pathVariable(id)),中国));}privateErrorsvalidate(Personperson){ErrorserrorsnewBeanPropertyBindingResult(person,person);validator。validate(person,errors);if(errors。hasErrors()){returnerrors;}returnnull;}}
路由配置ConfigurationpublicclassPersonHandlerConfiguration{ResourceprivatePersonHandlerph;BeanpublicRouterFunctionServerResponsenestPerson2(){returnroute()。path(persons2,b1b1。nest(accept(MediaType。APPLICATIONJSON),b2b2。GET({id},accept(MediaType。APPLICATIONJSON),ph::queryPerson)。before(requestServerRequest。from(request)。header(xpack,123123)。build()))。POST(save,ph::save))。after((request,response){System。out。println(afterexecution。。。response。statusCode());returnresponse;})。filter((request,next){if(request。pathVariable(id)。equals(100)){returnServerResponse。ok()。body(参数错误);}else{returnnext。handle(request);}})。build();}}
POJOpublicclassPerson{privateIntegerid;NotEmpty(message姓名必须填写)privateStringname;}URL处理组件
URL组件可以在SpringMVCandSpringWebFlux中都可以使用。
UriComponentsBuilder帮助从带有变量的URI模板构建URI,如下例所示:UriComponentsuriComponentsUriComponentsBuilder。fromUriString(https:pack。comlovers{lover})1。queryParam(q,{q})2。encode()3。build();4URIuriuriComponents。expand(lover,hcw)。toUri();5使用URI模板的静态工厂方法添加或替换URI组件请求对URI模板和URI变量进行编码建立一个UriComponents展开变量并获得URI
以上代码运行结果:https:pack。comloverslover?qhcw
上面的例子可以合并为一个链,并使用buildAndExpand进行缩短,如下面的例子所示:URIuriUriComponentsBuilder。fromUriString(https:pack。comlovers{lover})。queryParam(q,{q})。encode()。buildAndExpand(lover,hcw)。toUri();
你可以通过直接进入URI(这意味着编码)来进一步缩短它,如下面的例子所示:URIuriUriComponentsBuilder。fromUriString(https:pack。comlovers{lover})。queryParam(q,{q})。build(lover,hcw);
你可以使用完整的URI模板进一步缩短它,如下例所示:URIuriUriComponentsBuilder。fromUriString(https:pack。comlovers{lover})。build(lover,hcw);
完毕!!!
Spring容器这些扩展点你都清楚了吗?
Spring事务实现原理源码分析
Spring中的Configuration注解你真的了解吗?
SpringBoot对SpringMVC都做了哪些事?(一)
SpringBoot对SpringMVC都做了哪些事?(二)
SpringBoot对SpringMVC都做了哪些事?(三)
SpringBoot对SpringMVC都做了哪些事?(四)
老婆生孩子接生的是男医生,有心结了,怎么办问题老婆生孩子一周了,当时医院分配的接生医生是男医生,我当时要求换一个女医生,但是被拒绝了,最后还是妥协了,不过我还是产生心结了,因为自己老婆被其它男人看光,这非常难接受,我是一个
那些神仙句子,建议收藏(偶尔想念,经常偶尔)1。画的立体,来自于它的阴影,人也是如此。2。她的灵魂是她的伴侣,她的内在是一座剧场。3。想起你很多,想念你更多。4。黑白分明的,除了昼夜交替,还有你与我的关系。5。杀出重围的万中
第十七届小五羊杯青少年象棋大赛开赛文羊城晚报全媒体记者苏荇第十七届小五羊杯青少年象棋大赛于2月4日拉开战幕。本届赛事与第30届五羊杯全国象棋冠军邀请赛的半决赛决赛同期进行,又适逢元宵灯会,给现场参赛的150名小棋手
微视频冰雪之光冬奥梦圆,燃情冰雪。2023年2月4日,是北京冬奥会开幕一周年的日子。北京冬奥会冬残奥会的筹办举办推动了我国冰雪运动跨越式发展。冰雪如何改变中国人的生活?冰雪产业有怎样的发展?后冬
跟随老韩走遍中国,甘肃篇之九平凉市本文为走遍中国的长篇游记,每日更新,希望大家喜欢关注点赞并转发,谢谢!(九)平凉市平凉市位于甘肃省东部,东邻陕西省,南接天水市,西与定西市和白银市相连,北与宁夏回族自治区和庆阳市为
甘肃九曲黄河灯阵火树银花通夜明央视网消息元宵节期间,甘肃省张掖市甘州区点亮九曲黄河灯阵,迎接八方游客赏月观灯的同时,体验非遗民俗魅力。总台记者安文剑这里是甘肃省张掖市甘州区的屋兰古镇,这里的九曲黄河灯阵正在举行
建水古城(文中所有图片均由手机拍照)建水古城始建于唐代元和年间,即公元806年820年。朝阳楼朝阳楼古称步头,亦名巴甸,彝族语称惠历,惠在彝语中称为海,历称为天,即大海的意思,汉语译为建水
呼吸延年益寿的奥秘上篇文章讨论的手太阴肺经为何居12经之首,今天说说千百年来被刻意掩盖的秘密呼吸的奥秘。一呼吸时刻存在,总被忽视。脾胃是水谷之海是气血生化之原是后天之本的观念早已深入人心,我们也早习
原来,上天让你变老生病以及受苦,其实有这几个目的人间有八苦,生老病死爱别离怨憎会求不得五阴盛。诞生在这个世界,就注定了要受苦。这些苦,既有肉体上的折磨,也有心理上的折磨,更有年岁老去的唏嘘悲叹。为什么人间有八苦,而不存在人间有八
深海可以讲述得安静深沉一些作者韩浩月关注电影深海,一部分原因是导演田晓鹏,2015年,他凭借动画片西游记之大圣归来一战成名。西游记之大圣归来以浓烈的色彩对人物大胆的重新塑造,颠覆了孙悟空与西游记在观众心目中
张常宁婉拒中国女排集训,放大10倍后看细节,原因清晰可见张常宁婉拒中国女排集训,放大10倍后看细节,原因清晰可见。网友热议一针见血地指出运动员都是过劳伤,一身伤病造成后半生痛苦没人去管,张常宁认清现实不再造次是自己选择,外行人凑什么热闹