当前位置: 首页 > news >正文

如何 网站优化一些做淘宝优惠券的网站

如何 网站优化,一些做淘宝优惠券的网站,网站免费正能量不用下载,重庆网站建设的公司ControllerAdvice注解是Spring3.2中新增的注解#xff0c;学名是Controller增强器#xff0c;作用是给Controller控制器添加统一的操作或处理。 对于ControllerAdvice#xff0c;我们比较熟知的用法是结合ExceptionHandler用于全局异常的处理#xff0c;但其作用不止于此。…ControllerAdvice注解是Spring3.2中新增的注解学名是Controller增强器作用是给Controller控制器添加统一的操作或处理。 对于ControllerAdvice我们比较熟知的用法是结合ExceptionHandler用于全局异常的处理但其作用不止于此。ControllerAdvice拆开来就是Controller Advice关于Advice在Spring的AOP中是用来封装一个切面所有属性的包括切入点和需要织入的切面逻辑。这里ControllerAdvice也可以这么理解其抽象级别应该是用于对Controller进行切面环绕的而具体的业务织入方式则是通过结合其他的注解来实现的。ControllerAdvice是在类上声明的注解其用法主要有三点 1.结合方法型注解ExceptionHandler用于捕获Controller中抛出的指定类型的异常从而达到不同类型的异常区别处理的目的。 2.结合方法型注解InitBinder用于request中自定义参数解析方式进行注册从而达到自定义指定格式参数的目的。 3.结合方法型注解ModelAttribute表示其注解的方法将会在目标Controller方法执行之前执行。 从上面的讲解可以看出ControllerAdvice的用法基本是将其声明在某个bean上然后在该bean的方法上使用其他的注解来指定不同的织入逻辑。不过这里ControllerAdvice并不是使用AOP的方式来织入业务逻辑的而是Spring内置对其各个逻辑的织入方式进行了内置支持。 ControllerAdvice注解的使用 ControllerAdvice public class SpringControllerAdvice {/*** 应用到所有被RequestMapping注解的方法在其执行之前初始化数据绑定器* param binder*/InitBinderpublic void initBinder(WebDataBinder binder) {}/*** 把值绑定到Model中使全局RequestMapping可以获取到该值* param model*/ModelAttributepublic void addAttributes(Model model) {model.addAttribute(words, hello world);}/*** 全局异常捕捉处理* param ex* return*/ResponseBodyExceptionHandler(value Exception.class)public Map errorHandler(Exception ex) {Map map new HashMap();map.put(code, 100);map.put(msg, ex.getMessage());return map;}}在启动应用之后被ExceptionHandler、InitBinder和ModelAttribute注解的方法都会作用在被RequestMappping注解的方法上。比如上面的ModelAttribute注解的方法参数model上设置的值所有被RequestMapping注解的方法中都可以通过ModelMap获取。 RequestMapping(/index) public String index(ModelMap modelMap) {System.out.println(modelMap.get(words)); }// 也可以通过ModelAttribute获取 RequestMapping(/index) public String index(ModelAttribute(words) String words) {System.out.println(words); }下面对ControllerAdvice三种使用方式进行分别讲解。 ExceptionHandler拦截异常并统一处理 ExceptionHandler的作用主要在于声明一个或多个类型的异常当符合条件的Controller抛出这些异常之后将会对这些异常进行捕获然后按照其标注的方法的逻辑进行处理从而改变返回的视图信息。 ExceptionHandler的属性结构 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface ExceptionHandler {// 指定需要捕获的异常的Class类型Class? extends Throwable[] value() default {}; }使用ExceptionHandler捕获RuntimeException异常的例子 ControllerAdvice public class SpringControllerAdvice {ExceptionHandler(RuntimeException.class)public ModelAndView runtimeExceptionHandler(RuntimeException e) {e.printStackTrace();return new ModelAndView(error);} }Controller public class UserController {RequestMapping(value /users, method RequestMethod.GET)public void users() {throw new RuntimeException(没有任何用户。);} }这样当访问/users的时候因为在该方法中抛出了RuntimeException那么理论上这里的异常捕获器就会捕获该异常然后返回我们定义的异常视图默认的error视图。 使用InitBinder绑定一些自定义参数 对于InitBinder该注解的主要作用是绑定一些自定义的参数。一般情况下我们使用的参数通过RequestParamRequestBody或者ModelAttribute等注解就可以进行绑定了但对于一些特殊类型参数比如Date它们的绑定Spring是没有提供直接的支持的我们只能为其声明一个转换器将request中字符串类型的参数通过转换器转换为Date类型的参数从而供给RequestMapping标注的方法使用。 InitBinder的属性结构 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface InitBinder {// 这里value参数用于指定需要绑定的参数名称如果不指定则会对所有的参数进行适配// 只有是其指定的类型的参数才会被转换String[] value() default {}; }使用InitBinder注册Date类型参数转换器的实现 ControllerAdvice public class SpringControllerAdvice {InitBinderpublic void globalInitBinder(WebDataBinder binder) {binder.addCustomFormatter(new DateFormatter(yyyy-MM-dd));} }Controller public class UserController {RequestMapping(value /users, method RequestMethod.GET)public void users(Date date) {System.out.println(date); // Tue May 02 00:00:00 CST 2019} }这里InitBinder标注的方法注册的Formatter在每次request请求进行参数转换时都会调用用于判断指定的参数是否为其可以转换的参数。可以看到当访问/users的时候对request参数进行了转换并且在接口方法中成功接收了该参数并在控制台打印出日期格式的结果。 使用ModelAttribute在方法执行前进行一些操作 关于ModelAttribute的用法除了用于方法参数时可以用于转换对象类型的属性之外其还可以用来进行方法的声明。如果声明在方法上并且结合ControllerAdvice该方法将会在ControllerAdvice所指定的范围内的所有接口方法执行之前执行并且ModelAttribute标注的方法的返回值还可以供给后续会调用的接口方法使用。 ModelAttribute的属性结构 Target({ElementType.PARAMETER, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface ModelAttribute {// 该属性与name属性的作用一致用于指定目标参数的名称AliasFor(name)String value() default ;AliasFor(value)String name() default ;// 与name属性一起使用如果指定了binding为false那么name属性指定名称的属性将不会被处理boolean binding() default true; }这里ModelAttribute的各个属性值主要是用于其在接口方法参数上进行标注时使用的如果是作为方法注解其name或value属性则指定的是返回值的名称。 使用ModelAttribute注解进行方法标注的一个例子 ControllerAdvice public class SpringControllerAdvice {ModelAttribute(value message)public String globalModelAttribute() {System.out.println(添加了message全局属性。);return 输出了message全局属性。;} }Controller public class UserController {RequestMapping(value /users, method RequestMethod.GET)public void users(ModelAttribute(message) String message) {System.out.println(message);} }这里ModelAttribute注解的方法提供了一个String类型的返回值而ModelAttribute注解中指定了该属性的名称是message这样在Controller层就可以通过ModelAttribute注解接收名称为message的参数从而获取到前面绑定的参数了。 添加了message全局属性。 输出了message全局属性。从输出结果上看使用ModelAttribute注解标注的方法确实在目标方法执行之前执行了。需要说明的是ModelAttribute标注的方法的执行是在所有的拦截器的preHandle()方法执行之后才会执行。 小结 关于ControllerAdvice注解的三种使用方式对应的注解这三种注解如果应用于ControllerAdvice注解所标注的类中那么它们表示会对ControllerAdvice所指定的范围内的方法都有效如果单纯地将这三种注解应用于某个Controller中那么它们将只会对该Controller类中的所有接口有效并且此时是不需要在该Controller上标注ControllerAdvice注解的。 另外的还有RestControllerAdvice注解用法和ControllerAdvice注解类似只是当需要返回值到响应头的时候就不用在方法上添加ResponseBody注解了。
http://www.sadfv.cn/news/204336/

相关文章:

  • 百度做网站找谁网络维护协议范本
  • 整站seo优化一般多少钱建设沙滩车官方网站
  • 建设一个商城网站的成本店铺装修公司
  • 电子商务网站设计心得体会网页设计与制作代码软件
  • 杭州工程网站建设自己做店铺网站
  • 导购网站建设软件开发应该学什么专业
  • 公司网站怎么弄江苏省建设工程施工安全网站
  • 做网站应该画什么图中国北京出啥大事了
  • 怎么制作网站后台设计网站的关键点
  • 哪个网站做ppt赚钱锦州网站建设排行榜
  • 自己怎么建设购物网站wordpress pdf插件下载
  • 天津网站建设信息怎么做创意短视频网站
  • 成都网站建设全平台德邦公司网站建设特点
  • 不是做有网站都叫jwth网站设置不可粘贴
  • 视频网站开发前景网站开发数据库
  • 查看网站建设工作网站开发留言板
  • 网站开发交易平台福建网站模板
  • 天津做网站的网络公司网络推广的优化方法
  • 软件开发网站策划方案h5页面制作软件下载下来要钱吗
  • 四川省城乡建设信息网站证件查询到哪里去学营销管理课程
  • 网页链接怎么打开seo招聘
  • 企业网站建设开发多少钱银川网站建设那家好
  • 免费设计企业logo裤子seo关键词
  • 福建省龙岩市建设培训中心网站信息化设计公司排名
  • 企业网站的最高形态是综合型网站iapp影视源码
  • 广州做网站一般要多少钱软文推广代表平台
  • 中国著名的个人网站苏州市企业排名100强
  • 做集团网站wordpress导航图标插件
  • 中国建设银行网站医保苏州建设工程质量监督站网站
  • 攀枝花建设工程有限责任公司网站各大网站发布信息