专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

SpringBoot项目传参校验最佳实践

  场景还原
  简单业务场景模拟:
  假如你现在在做一个成绩录入系统,你愉快地用SpringBoot框架写了一个后台接口,用于接收前台浏览器传过来的Student对象,并插入后台数据库。
  我们将传入的Student对象定义为:publicclassStudent{privateStringname;姓名privateIntegerscore;考试分数(满分100分)privateStringmobile;电话号码(11位)}
  然后写一个Post请求的后台接口,来接收网页端传过来的Student对象:RestControllerpublicclassTestController{AutowiredprivateStudentServicestudentService;PostMapping(add)publicStringaddStudent(RequestBodyStudentstudent){studentService。addStudent(student);将student对象存入数据库returnSUCCESS;}}
  此时我想你一定看出来了上面这段代码的漏洞,因为我们并没有对传入的Student对象做任何数据校验,比如:
  Student对象里三个字段的某一个忘传了,为null怎么办?Student的score分数,假如写错了,写成101分怎么办?Student的mobile11位手机号码,假如填错了,多写了一位怎么办?。。。等等
  这些数据虽然在前端页面一般会做校验,但我们作为一个严谨且良心的后端开发工程师,我们肯定要对传入的每一项数据做严格的校验,所以我们应该怎么写?PostMapping(add)publicStringaddStudent(RequestBodyStudentstudent){if(studentnull)return传入的Student对象为null,请传值;if(student。getName()null。equals(student。getName()))return传入的学生姓名为空,请传值;if(student。getScore()null)return传入的学生成绩为null,请传值;if((student。getScore()0)(student。getScore()100))return传入的学生成绩有误,分数应该在0100之间;if(student。getMobile()null。equals(student。getMobile()))return传入的学生电话号码为空,请传值;if(student。getMobile()。length()!11)return传入的学生电话号码长度有误,应为11位;studentService。addStudent(student);将student对象存入MySQL数据库returnSUCCESS;}
  写是写完了,就是感觉手有点酸,并且心有点累,这个Student对象倒还好,毕竟内部仅3个字段,假如一个复杂的对象有30个字段怎么办?简直不敢想象!
  神注解加持!
  其实Spring框架很早版本开始,就通过注解的方式,来方便地为我们提供了各项交互数据的校验工作,比如上面的例子,我们只需要在传入的Student实体类的字段中加入对应注解即可方便的解决问题:publicclassStudent{NotNull(message传入的姓名为null,请传值)NotEmpty(message传入的姓名为空字符串,请传值)privateStringname;姓名NotNull(message传入的分数为null,请传值)Min(value0,message传入的学生成绩有误,分数应该在0100之间)Max(value100,message传入的学生成绩有误,分数应该在0100之间)privateIntegerscore;分数NotNull(message传入的电话为null,请传值)NotEmpty(message传入的电话为空字符串,请传值)Length(min11,max11,message传入的电话号码长度有误,必须为11位)privateStringmobile;电话号码}
  当然,于此同时,我们还需要在对象入口处,加上注解Valid来开启对传入Student对象的验证工作:PostMapping(add)publicStringaddStudent(RequestBodyValidStudentstudent){棒棒哒!原先各种繁杂的参数校验工作统统都省了!一行代码不用写studentService。addStudent(student);将student对象存入MySQL数据库returnSUCCESS;}
  这时候,如果某个字段传入错误,比如我传数据的时候,将学生的成绩误传为101分,则接口返回结果便会提示出错误详情:
  当然,关于这个事情的原理,既然用到了注解,无非用的也就是Java里的各种反射等知识来实现的,感兴趣的小伙伴可以借此机会研究一下!
  数据异常统一拦截
  上面利用注解的方式做统一数据校验感觉十分美好,但唯一美中不足的就是返回的结果太过繁杂,不一定使我们需要的格式,我们需要做统一处理,比如:我只想将具体参数校验的错误提示信息给抠出来返回给前端即可。
  为此,我们为项目配置全局统一异常拦截器来格式化所有数据校验的返回结果。ControllerAdviceResponseBodypublicclassGlobalExceptionInterceptor{ExceptionHandler(valueException。class)publicStringexceptionHandler(HttpServletRequestrequest,Exceptione){StringfailMsgnull;if(einstanceofMethodArgumentNotValidException){拿到参数校验具体异常信息提示failMsg((MethodArgumentNotValidException)e)。getBindingResult()。getFieldError()。getDefaultMessage();}returnfailMsg;直接吐回给前端}}
  如上面代码所示,我们全局统一拦截了参数校验异常MethodArgumentNotValidException,并仅仅只拿到对应异常的详细Message信息吐给前端,此时返回给前端的数据就清楚得多:
  可以的,非常优雅!
  每天进步一点点!Peace!

欧文2510东契奇缺阵独行侠擒国王获3连胜!福克斯33分NBA常规赛2月11日继续进行,本场比赛东契奇继续缺阵,最终,独行侠以122114战胜国王,独行侠获得3连胜。首节开始,双方上来打得难分难解,独行侠以1311稍稍领先后约什格林连拿字母哥359洛佩兹2215雄鹿轻取快船豪取10连胜!NBA常规赛2月11日继续进行,本场比赛米德尔顿缺阵,而快船这边莱昂纳德不打。最终,雄鹿以119106战胜快船,雄鹿获得10连胜!首节开始,字母哥上来就连拿8分帮助雄鹿打出142开世界排名创新高,郑钦文横扫头号种子晋级阿布扎比四强郑钦文强势晋级四强。面对世界排名第8位的卡萨金娜,郑钦文拿出了极为强势的表现。北京时间2月10日,WTA500阿布扎比站女单八强战,郑钦文以6162的比分对赛会头号种子卡萨金娜完成拿下得分王后,詹姆斯59岁破篮板纪录保罗44岁破助攻抢断纪录?在职业生涯第20年,百年一遇的天选之子勒布朗詹姆斯打破了NBA历史总得分纪录。那NBA历史总篮板助攻抢断盖帽纪录是否有机会被打破?篮板张伯伦保持的总篮板纪录为23924个,现役最高2023年赛事出炉除全锦赛,冠军杯为非国手和年轻队员提供机会!近日,中国排协出炉了2023年度赛事的通知,从通知来看,今年男女排的比赛还是很多的!2023年比赛具体的赛事为3月5日到14日的全国青少年U19男女排锦标赛3月15日到24日的全国女排五冠王梁艳近况?退役后和球迷创下过亿资产?女儿是清华博士1981年到1986年,我国女排成为第一支五连冠的女排队伍。被称为笑面黑娃的梁艳是整支队伍唯一五次冠军都在的队员,她的职业生涯也没有留下多少遗憾。梁艳,1961年10月4日出生于四香饽饽!买断市场五位极受欢迎的球员威少余温尚存,沃尔再启程疯狂的交易市场已经结束了,而近期各支球队想要完成补强,那么买断市场将会是他们比较关注的地方,近日步行者方面宣布,他们将会裁掉伊巴卡,此前伊巴卡在一笔三方交易当中从雄鹿被送到了步行者格莱美红毯霉霉眼神太勾人,麦当娜撞脸刘晓庆,阿黛尔现在好美过完元宵节看红毯!第65届格莱美颁奖礼成功开启,先来看看久违的国外明星大咖吧!但这红毯不看不知道,一看吓一跳,真的是各路妖魔鬼怪齐聚,简直是一个大写的视觉冲击。红毯上最正常的泰勒斯想买风衣之前,先看过这些搭配灵感吧,心里有数才能聪明购物头条创作挑战赛春暖花开的日子,又想逛街血拼入手新衣了,很多人都会觉得想入手一件风衣。不过学聪明的我们,可以先了解下风衣的搭配,看看是否能跟自己原本的衣服匹配,或者是否能让旧衣服搭出藏历年期间,拉萨这些景点免费!西藏卫视藏历年临近七天小长假各位小伙伴都想好去哪儿玩了吗赶紧看过来小布带你去拉萨这些免费景点打卡罗布林卡罗布林卡免费对外开放,对想看罗布林卡内古建筑的市民游客来说是一大喜事,不少游四川达州市大竹县值得游玩的旅游景点有哪些?自驾游有什么攻略?大竹县大竹县隶属四川省达州市,位于四川省东部达州市南部,东邻重庆市梁平区垫江县,南接广安市邻水县,西界广安市前锋区达州市渠县,北连达州市达川区,幅员面积2078。79平方公里。大竹
音乐发烧友深爱的7款HiFi耳机,双十一先加哪款购物车呢?声音中正还原度高音染少解析力强氛围感强有人不解,为什么会有那么多人痴迷于HiFi耳机?因为HiFi耳机所带来的高品质好声音聆听体验,着实让人沉醉。Tiger声音兼顾了扎实度与鲜活度贷款综合评分不足怎么补救?专业人士说做好以下几点一般来说,贷款就是为了获取资金,缓解资金紧张。在经济高速发展的今天,人们对于资金的需求日益强烈,小到一笔蚂蚁花呗的日常消费支出(日用品衣服鞋子等)大到购车购房,甚至创业贷款企业融资华为将在月末发布一款折叠屏手机,搭载高通骁龙芯片,起步价6000华为将在月末发布一款折叠屏手机,采用竖向对折的方式,这款折叠屏手机的起步价在6000以上,似乎成为了华为折叠屏手机中最便宜的一个,那么下面就来了解一下这款折叠屏手机的一些相关信息吧马化腾一句不知道,拯救了他和腾讯提到中国互联网人,你会想到谁?马云?刘强东?马化腾?如今前两位已经退隐江湖,只有马化腾依然做CEO,指点江山。2000年,刚满两岁的腾讯就引来了一次重大经济困难,当然这也是小马哥的Aptos代币在交易首次亮相时暴跌FTXCoinbase和Binance是首批上架,新的第一层代币的交易所。由于交易员欢迎APT进入加密货币冬天,新来者加密货币Aptos周三早些时候在主要交易所首次亮相时价值暴跌。新车3分钟完成加氢,续航达1000公里,HopiumMachina正式发布文懂车帝原创许博懂车帝原创产品日前,在2022巴黎车展上,来自法国本土的造车新势力品牌Hopium发布了旗下首款氢燃料电池车HopiumMachina。据悉,该车可在3分钟内完成加保健品怎么入驻天猫京东开店?需要什么条件资质及费用?随着人们健康意识的增强,亚健康人群和老龄化人群的增多,保健品市场潜力巨大,线上市场前景广阔。今天我们来说说,做保健品怎么入驻天猫京东开店?需要哪些条件和费用?天猫天猫保健品入驻要求这种适合长期配戴的隐形眼镜,许多人居然不知道在普通人眼里,框架眼镜可能是造型利器,戴上之后斯文又帅气。但对于近视的朋友来说,框架眼镜带来的束缚,真的不是一点点。如图所示,物体缩小视物变形眼镜之外皆为盲区都是框架眼镜所带来的困又受伤了!刚拿4千万就躺平天赋榜眼已沦为玻璃人季前赛本是各支球队练兵的时间,但是为了试验新赛季的战术,各名球员在场上也都非常卖力,不过这也导致在今年的季前赛中有多名球员受伤。在休赛期刚刚与活塞签下一份3年3700万美元续约合同建模研究认为法国和西班牙北部的智人和尼安德特人曾共同存在在尼安德特人消失之前的1400到2900年里,现代人可能已经在法国和西班牙北部与尼安德特人共存。这是根据10月13日发表在科学报告上的一项新的建模研究。这些发现增加了我们对该地区两汤神时隔四年首次参加勇士揭幕战坦言追梦离队并非不可能北京时间10月19日,勇士迎来新赛季常规赛首战,这是克莱汤普森时隔四年首次参加揭幕战。汤普森谈到德雷蒙德格林的合同情况,坦言追梦离队并非不可能,尽管他不愿相信此事将发生。新赛季来了这一年中国原料药出口稳中向好,未来呢?未来三年,具有到期风险的专利药增多,叠加海外外包产业转移,是原料药企业的机遇文曹钢石天放编王小图Pixabay中国已多年位列全球最大的原料药生产和出口国,多个原料药品种的产能位居世大散文雷雨中的几组画面雷雨中的几组画面文陈希瑞人这一辈子,似乎与雨水有着千丝百缕难以割舍的缘分。雨生百谷,尤其是对于长年累月跟土地打交道的农民而言,这种缘分,皆因与他们的生活息息相关,似乎更密切些。他们做藤蔓好不好一夜失眠,迷迷糊糊的做了不知道几个梦。咯吱咯吱的开门声,打断了迷糊梦。随手摸起枕边的手机,哇咔咔,九点了。惊吓中以风速穿好了衣服,洗漱完毕。随意往嘴巴中塞了几口面包,出门。打工人的念念不忘,必有回响头条创作挑战赛文智慧大中原秋风吹落叶,总是即残酷,又无情。而且还透着那缕缕的缠绵。那是秋风与落叶的悲壮,那是生命与失去的告别,那是难舍的最后浪漫,那是失去了生命的枯黄。秋天的风,都致负重前行的我们我在头条搞创作第二期头条创作挑战赛成年人的世界就没有容易两个字,今天的你是否在为自己的生活苦苦地支撑着,负重前行是否已经成为了我们的常态?成年人首先直面的问题是自力更生,不能再享受摘抄打卡十五天!飞蛾扑火是因为着魔挑战抄书打卡100天摘抄分享摘抄第十五天了,前两天有一篇审核未通过,结果删除了,还需要更好地写内容啊!今天分享摘抄如下摘抄自追风筝的人罪行只有一种,只有一种,那就是盗窃,其他罪行都NASAEMIT灰尘探测器为气候科学带来首批太空地图NASA在国际空间站(ISS)上的地球表面矿物尘源调查(EMIT)任务已经产生了它的第一批矿物地图并提供了详细的图像,它们显示了内华达州西北部和撒哈拉沙漠中的利比亚地区的表面成分。王俊逸等RS等爆炸式增长的空间目标对SYISR电离层观测的影响及应对近年来,随着系列大型低地球轨道星座计划相继提出和实施,如StarLink(SpaceX的星链)Kuiper(亚马逊的柯伊伯)Starnet(中国星网)等,近地空间目标数量呈现爆炸式时间是什么?爱因斯坦认为时间是人类的幻觉,原本并不存在小时候我们就知道,光阴似箭日月如梭,一寸光阴一寸金,寸金难买寸光阴,时间对于人类来说非常重要,从古至今,有很多哲学家科学家都有各自对时间的观点,最早的时候,人类利用日晷来计算时间,今夜,我要抱着你的芳名入眠文丹派雨相公(成都)夜幕,已经低垂这座城市又即将灯火阑珊虽然会华灯璀璨虽然繁华大街上行人还会接踵摩肩可是,没有你在身边我依旧会孤单依旧会夜深人静度日如年亲爱的,今夜我要抱着你的芳名害怕在雨天一首很早的诗歌送给大家文游走的风车深夜的独光伴奏着我的心情涂上了悲伤冰冷的玻璃窗隔着安逸世界看见失落的像不知不觉愣在了雨天雨好大我好傻秋风落叶飘荡在远方心好累却想飞害怕在雨天记住你的脸慢慢消失在眼前痛有
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网