校验

本贴最后更新于 2891 天前,其中的信息可能已经时移世异

开发 web 的过程中校验并返回错误信息,的简单操作一直是我们一直以来追求的。如何用最方便最实用的方法来校验,这里 spring 给我们提供了极为方便的操作。

返回提示信息

校验完第一个操作应该返回错误或提示信息,所以这里先说如何简单而又方便的返回错误信息。

  • spring 提供了异常统一处理的操作。@ControllerAdvice

  • 从这里可以看到 _@ControllerAdvice_也注释了 @Component,只要扫描它,它也会被 spring 自动注入。
    image.png

  • @ControllerAdvice 中其他注解暂时不论,主要说明一下 @ExceptionHandler 这个注释在方法上的注解,下面是这个注解的一个例子

  • image.png

  • @ExceptionHandler 注解在方法上,提供一个默认异常来智能拦截。比如声明一个 TipException 异常类(继承 RuntimeException);如果在运行时抛出 TipException 异常,会被该方法拦截到,并进行下一步的处理(返回提示信息,或错误页面)

image.png

校验问题

既然有了 @ControllerAdvice,那我们可以随时随地的抛出错误信息。接下来就是校验问题:直接在业务逻辑中写校验代码,会增加代码的难读性和逻辑的复杂性,简单的方法就是在外部写出校验,需要就调用就好。spring 自带有拦截器,可是一个个方法的拦截器都需要配置;aop 却是"大题小用";而且,如果需要校验的请求过多,确实有点不简明。借鉴 jfinal,启发了我们是不是能在拦截器上花点功夫?

  • 预想是这样,我们只需要在所要校验的方法上,加个注释(比如叫做:@Before),给它加不同的校验类,来实现不同的校验效果。
  • 首先写一个声明,@Before,并声明它是在方法上用。

image.png

  • 里面 value 值是一个校验类数组。
  • 接下来,声明一个接口 BeforeInterceptor,该接口中只有一个方法,以进行校验操作。所有的校验类,必须继承该接口。
void doOperator(HttpServletRequest request, HttpServletResponse response);
  • 紧接着,创建一个普通的 spring 内部拦截器,拦截所有请求。
    在 preHandle 方法中,进行校验。
@Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { HandlerMethod handlerMethod = (HandlerMethod) o; Method method = handlerMethod.getMethod(); Before before = method.getAnnotation(Before.class); if(before != null){ Class<? extends BeforeInterceptor>[] beforeList = before.value(); for(Class<? extends BeforeInterceptor> oneClazz : beforeList){ BeforeInterceptor oneEntity= applicationContext.getBean(oneClazz); oneEntity.doOperator(httpServletRequest,httpServletResponse); //调用方法 } } return true; }
  • 而校验类只需要进行应有的操作,必要时抛出错误信息即可。

image.png

  • 所请求的方法,只需要加 @Before 声明,并根据需求添加校验类。

image.png

  • PS:根据需求可以扩展在类上加 Before 注解,校验其下所有请求。

~转自:http://www.jianshu.com/p/762019e23a57

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3200 引用 • 8216 回帖 • 1 关注
  • 校验
    3 引用 • 11 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖 • 1 关注

相关帖子

5 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Vanessa via macOS

    我可以说我昨晚把一个 js 拆为了 10 个。

  • 其他回帖
  • feix

    但是这样校验的结果不就是每个不同的方法,你就要单独再出去写一个校验类么?跟直接写方法里有什么区别么?

    2 回复
  • feix

    😆 我竟觉得很有道理啊~

    1 回复
  • zk123
    作者

    感觉比较有规范吧。都是一个接口下的子类,维护也好维护;而且这个请求有什么校验,能一眼看出来,写在方法里不容易查找。

  • 查看全部回帖
zk123
原来生活仅仅是一场骗局 郑州

推荐标签 标签

  • AWS
    11 引用 • 28 回帖 • 8 关注
  • Excel
    31 引用 • 28 回帖
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    181 引用 • 821 回帖
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 648 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 47 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 1 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 91 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 675 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 747 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 62 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    174 引用 • 3852 回帖
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 5 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • Word
    13 引用 • 41 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 757 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 3 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1742 回帖 • 6 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    89 引用 • 122 回帖 • 621 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 12 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖