范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

一波带走,SpringBoot中的各种参数校验方案汇总

  1、前言
  在控制器类的方法里自己写校验逻辑代码当然也可以,只是代码比较丑陋,有点"low"。业界有更好的处理方法,分别阐述如下。 2、PathVariable校验
  用法是:路径变量:正则表达式。当请求URI不满足正则表达式时,客户端将收到404错误码。不方便的地方是,不能通过捕获异常的方式,向前端返回统一的、自定义格式的响应参数。 3、方法参数校验@GetMapping("/validate1") @ResponseBody public String validate1(         @Size(min = 1,max = 10,message = "姓名长度必须为1到10")@RequestParam("name") String name,         @Min(value = 10,message = "年龄最小为10")@Max(value = 100,message = "年龄最大为100") @RequestParam("age") Integer age) {     return "validate1"; }
  如果前端传递的参数不满足规则,则抛出异常。注解Size、Min、Max来自validation-api.jar,更多注解参见 相关标准 小节。4、表单对象/VO对象校验
  当参数是VO时,可以在VO类的属性上添加校验注解。
  其中,Future注解要求必须是相对当前时间来讲"未来的"某个时间。
  5、自定义校验规则5.1 自定义注解校验
  需要自定义一个注解类和一个校验类。
  使用我们自定义的注解:
  5.2 分组校验
  /**      * 使用Defaul分组进行验证      * @param resume      * @return      */     @PostMapping("/validate5")     public String addUser(@Validated(value = Resume.Default.class) @RequestBody Resume resume) {         return "validate5";     }      /**      * 使用Default、Update分组进行验证      * @param resume      * @return      */     @PutMapping("/validate6")     public String updateUser(@Validated(value = {Resume.Update.class, Resume.Default.class}) @RequestBody Resume resume) {         return "validate6";     }
  建立了两个分组,名称分别为Default、Update。POST方法提交时使用Defaut分组的校验规则,PUT方法提交时同时使用两个分组规则。 6、异常拦截器
  通过设置全局异常处理器,统一向前端返回校验失败信息。 import com.scj.springbootdemo.WebResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils; import org.springframework.validation.ObjectError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody;  import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.util.List; import java.util.Set;  /**  * 全局异常处理器  */ @ControllerAdvice public class GlobalExceptionHandler {      private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);      /**      * 用来处理bean validation异常      * @param ex      * @return      */     @ExceptionHandler(ConstraintViolationException.class)     @ResponseBody     public  WebResult resolveConstraintViolationException(ConstraintViolationException ex){         WebResult errorWebResult = new WebResult(WebResult.FAILED);         Set> constraintViolations = ex.getConstraintViolations();         if(!CollectionUtils.isEmpty(constraintViolations)){             StringBuilder msgBuilder = new StringBuilder();             for(ConstraintViolation constraintViolation :constraintViolations){                 msgBuilder.append(constraintViolation.getMessage()).append(",");             }             String errorMessage = msgBuilder.toString();             if(errorMessage.length()>1){                 errorMessage = errorMessage.substring(0,errorMessage.length()-1);             }             errorWebResult.setInfo(errorMessage);             return errorWebResult;         }         errorWebResult.setInfo(ex.getMessage());         return errorWebResult;     }      @ExceptionHandler(MethodArgumentNotValidException.class)     @ResponseBody     public WebResult resolveMethodArgumentNotValidException(MethodArgumentNotValidException ex){         WebResult errorWebResult = new WebResult(WebResult.FAILED);         List  objectErrors = ex.getBindingResult().getAllErrors();         if(!CollectionUtils.isEmpty(objectErrors)) {             StringBuilder msgBuilder = new StringBuilder();             for (ObjectError objectError : objectErrors) {                 msgBuilder.append(objectError.getDefaultMessage()).append(",");             }             String errorMessage = msgBuilder.toString();             if (errorMessage.length() > 1) {                 errorMessage = errorMessage.substring(0, errorMessage.length() - 1);             }             errorWebResult.setInfo(errorMessage);             return errorWebResult;         }         errorWebResult.setInfo(ex.getMessage());         return errorWebResult;     } }7、相关标准
  JSR 303 是Bean验证的规范 ,Hibernate Validator 是该规范的参考实现,它除了实现规范要求的注解外,还额外实现了一些注解。
  validation-api-1.1.0.jar 包括如下约束注解:
  hibernate-validator-5.3.6.jar 包括如下约束注解:
  8、同时校验2个或更多个字段/参数
  常见的场景之一是,查询某信息时要输入开始时间和结束时间。显然,结束时间要 开始时间。可以在查询VO类上使用自定义注解,下面的例子来自这里。划重点:@ValidAddress使用在类上。

尹同跃可以笑了,奇瑞汽车王者归来,重返一线阵营7月份,奇瑞给我们很大的惊喜,销量暴涨57。7,创下历史新高。作为汽车行业的老兵,花甲之年的尹同跃,终于带领奇瑞王者归来,重返一线车企阵营,他可以笑了。1。二十五年的起伏跌宕?19私人账户收款,被判刑10个月!下半年个人收款高于这个数要小心了税收政策,税收园区,详情了解公众号轻捷税有不少企业利用老板财务人员等私人账户收付以实现少计收入少缴税的目的还有不少企业主将企业账户视为自己私人的钱口袋,有需要就从钱口袋中提还有企业中国首家新能源车企宣布破产!事实证明,新能源蛋糕不好分提起中国的新能源就不得不提比亚迪,作为自主掌握电机电控电池三大技术的车企。比亚迪改变了汽车靠进口的传统,依靠新能源汽车打开了中国走向世界的汽车通路。但月儿弯弯照九州,几家欢乐几家愁2022年GDP增速预测美国增长2。5,印度7。5,中国又是多少?自从疫情的出现,打破了人们的常规生活,方方面面都受到了疫情的影响,但是这些影响大部分都是不利方面的,有实力的国家,还是依然会继续保持原位。美国稳居全球第一,我国仅次于美国排在第二名密恐慎入!水上乐园被挤爆,游泳圈看得头皮发麻,网友万一近日,有网友报料黑龙江大庆黑鱼湖水上乐园人流量爆棚泳池内挤满了游客水波涌动头和脖子泳圈怼在一起随着水浪的波动依旧在原地漂浮网友戏称一水池甜甜圈直呼密集恐惧症犯了据了解,该事件已经得英公赛资格赛前2日中国9人全胜丁俊晖破百赢首胜O莱恩斯24丁俊晖北京时间8月11日凌晨,2022斯诺克英国公开赛资格赛第2日战罢。4位出战的中国选手全部胜出丁俊晖轰出1杆破百,大比分42战胜O莱恩斯,迎个人赛季首胜田鹏飞连续538岁女星戚薇宣布退圈!专心为美国老公生子,瘦回90斤再复出戚薇宣布暂退娱乐圈8月11日。有网友发现,知名女星戚薇,在个人直播间中宣布,她本人要暂时退出娱乐圈了。退圈的意思是不再出来抛头露面,不再演戏,不再参加综艺节目,不再直播带货等等。只杨紫否认与刘学义恋爱,没有吃同一块蛋糕,男方并未在她家过夜近日,杨紫和刘学义双双登上热搜,张小寒预告的五千万顶流粉丝的大瓜原来是杨紫。对方拍到刘学义在杨紫家过夜,生日当天,两人同吃一口蛋糕,该消息一出,迅速引发全网关注。如果说两人单身倒没装文艺假清纯!在生活中演戏翻车的7位明星,累不累?文阿帕好好的帅哥美女,却长了一张说谎的嘴!而今演艺圈的明星戏演得多了就引以为真,人设立的稳,道路走的一帆风顺。可人设翻车后,留下一地尴尬。自己挖的坑,哭着也得跳。今天和大家一起看一张子枫有男朋友了,我们还是来展望一下赵今麦吧张子枫是出道16年的老戏骨,也是00后女演员的领军人物。没谈恋爱之前,大家都叫她国民妹妹。可一切美好,在她谈恋爱后,如玻璃碎了一地,扎得人心疼。清纯形象也随之覆灭。按理说,张子枫2阿里巴巴1。3万人离职怎么看?顺其自然阿里巴巴1。3万人离职。怎么看?顺其自然原创韩寒卢太平中企思智库202208110717发表于北京小糊涂仙酒业集团是中企思战略合作伙伴阿里巴巴最新财报显示,第二季员工总数较上季再减
秒懂流媒体协议RTMP与RTSP你好,这里是网络技术联盟站。RTMP与RTSP是比较常见的两种流媒体协议,那么什么是RTMP?什么是RTSP?它们两之间有什么区别?使用的时候应该如何选择?今天瑞哥就用人话好好和大索尼4nm新机发布,12G512G售价9499元,升级5000mAh大电池如果喜欢手机摄影,那么在选择手机的时候想必大家都会对索尼旗舰下手,因为索尼手机在影像专业度上完全是按照相机的水准来做,这样说吧,在拍摄专业度上,业界没有哪个品牌的影像技术能赶上索尼地球上为什么会有黑人白人黄种人,谁的基因更加接近?综述如果问你,当今世界上主要有哪些人种,相信你会毫不犹豫地说出答案,黑种人黄种人和白种人,甚至还能就他们的源起和发展来展开一番,但是如果要问你的这三种人之间,黑种人的基因跟黄种人和中国科大在InGaAs单光子探测芯片设计制造方面取得重要进展中国科学技术大学光学与光学工程系王亮教授课题组设计并制备的InGaAs单光子探测器芯片取得重大进展。该研究团队通过设计金属分布式布拉格反射器优化单光子探测器芯片的光学性能,完成低本太空观察洞察号火星车最后一张自拍照美国宇航局的洞察号InSight火星着陆器于2022年4月24日,即该任务的第1211个火星日,进行了最后一次自拍。与2018年12月着陆后不久拍摄的第一张自拍相比,着陆车上的灰尘在古老的海底山顶发现通往亚特兰蒂斯的阴森黄砖路一组海洋生物学家在夏威夷附近的一座海底山顶上发现了似乎是一条黄砖路之后,意识到他们肯定发现了什么不同寻常的事物。夏威夷地图团队其他成员表示,这些岩石让人联想到一个非常不同的虚构世界面积相当于10个颐和园!这里将成北京最大绿肺在北京城区东北方向20公里外,有一处仍在建设中的公园,地跨北京朝阳顺义昌平三区,建成后的面积相当于10个颐和园。从2020年9月1日温榆河公园朝阳示范区建成开园,及2021年9月2能打爆辽宁莫兰德!CBA最强外援示好广东,朱芳雨正式迎来第1王牌202122赛季的CBA联赛正式告一段落,不少球迷的关注点都在各大夺冠热门球队的引援补强上。尤其是在休赛期输给辽宁队的广东队,新一轮人员调整就会是CBA联赛各大球迷关注的焦点。虽然20!勇士夺赛点却难拿总冠军,联盟最强韧性球队诞生分区决赛前4场打完,西部决赛勇士30独行侠,东部决赛热火22凯尔特人。从比分看,勇士夺赛点基本锁定了一个总决赛名额,NBA历史上在7场4胜制的季后赛系列赛里,曾出现了146次大比分深度绝地七武士还有哪几个在联盟在夺冠后的状况又是什么样绝地七武士只有两人还在征战防守英雄德拉维多瓦当时的骑士因为乐福与欧文的受伤,这也导致骑士被迫在总决赛上长时间使用七人轮换,包括当时的詹姆斯,这七个人被人们调侃成绝地七武士。德拉维多剑山!北京郊区爬山遛娃徒步亲子游的好去处简单游山水,简单又好玩。今天分享的是一条轻徒步路线,位于北京市顺义区舞彩浅山剑山附近。全长10公里,爬升200米,难度较小,一般家庭均可游玩。是休闲,溜娃的好去处舞彩浅山位于顺义区