06.自定义拦截器、全局异常处理类、异步调用

自定义拦截器
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 自定义拦截器
 */
@Configuration
public class MyInterceptor extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        HandlerInterceptor inter = new HandlerInterceptor() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("request:"+request.getRequestURL());
                return true;
            }

            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

            }

            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

            }
        };
        registry.addInterceptor(inter).addPathPatterns("/**");
    }
}
全局异常处理类
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

/**
 * 全局异常处理类
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public Map<String,Object> handleException(Exception e){
        Map<String, Object> map = new HashMap<>();
        map.put("errorCode",500);
        map.put("errorMsg",e.toString());
        return map;
    }
}
异步调用
@SpringBootApplication(scanBasePackages = {"com.fly"})
@EnableAsync
public class SpringDemoApp{

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;

import java.util.Random;
import java.util.concurrent.Future;

@Service
public class AsyncServiceImpl {
    private static Random random = new Random();

    @Async
    public Future<String> doTask1() throws Exception{
        System.out.println("doTask1 start");
        long b = System.currentTimeMillis();
        Thread.sleep(random.nextInt(1000));
        long e = System.currentTimeMillis();
        System.out.println("doTask1 end:"+(e-b));
        return new AsyncResult<>("doTask1 end");
    }

    @Async
    public Future<String> doTask2() throws Exception{
        System.out.println("doTask2 start");
        long b = System.currentTimeMillis();
        Thread.sleep(random.nextInt(1000));
        long e = System.currentTimeMillis();
        System.out.println("doTask2 end:"+(e-b));
        return new AsyncResult<>("doTask2 end");
    }

    @Async
    public Future<String> doTask3() throws Exception{
        System.out.println("doTask3 start");
        long b = System.currentTimeMillis();
        Thread.sleep(random.nextInt(1000));
        long e = System.currentTimeMillis();
        System.out.println("doTask3 end:"+(e-b));
        return new AsyncResult<>("doTask3 end");
    }
}
 @Autowired
    private AsyncServiceImpl asyncService;

    @RequestMapping("/asyn")
    public String asyn() throws Exception {
        long b = System.currentTimeMillis();
        Future<String> f1 = asyncService.doTask1();
        Future<String> f2 = asyncService.doTask2();
        Future<String> f3 = asyncService.doTask3();
        while (true){
            if (f1.isDone()&&f2.isDone()&&f3.isDone()){
                break;
            }
        }
        long e = System.currentTimeMillis();
        return "asyn end:"+(e-b);
        //doTask2 start
        //doTask1 start
        //doTask3 start
        //doTask1 end:290
        //doTask2 end:607
        //doTask3 end:795

        //"asyn end:802"
    }

转载于:https://www.cnblogs.com/fly-book/p/11573332.html

Shader之——花草动画shader 今天 ,接到了个需求,花草的动画。谈到花草动画,立马就想到顶点动画,让顶点动起来就可以实现了。但是有个问题,所有的草都往一个方向运动,这个就麻烦了。因为在shader里没有随机这种概念,提到最多的是用一张噪声图来模拟。在网上搜索了一下,发现有更好的办法,就是用每个顶点到一个点的距离来控制动画的开始,毕竟每个顶点到同一个点的距离很少是一样的。 float dis = distance ... 阅读详情

相关推荐

cvtColor +内存泄漏

题目不知道怎么取,因为cvtColor并没有产生内存泄漏,但是我由于没有正确使用cvtColor而出现了内存泄漏的问题,所以暂且以cvtColor+内存泄漏为题 1.应用背景 项目中用到cvtColor的地方是需要将灰度图转为3通道的彩色图(实际上转换后仍然为灰色的,但是电脑认为的是3通道的彩色图了) 因此需要用到以下语句 cvtColor(src_img, cvMtxRGB, C

smilebluesky的专栏 6058

全局异常处理

1、通过@controllerAdvice 注解,我们可以在一个地方对所有@controller注解的控制器进行管理 注解了@ControllerAdvice 的类的方法可以使用 @ExceptionHandler、@InitBinder、@ModelAttribute 注解到方法上,这对所有注解了@RequestMapping的控制器内的方法都有效 2、@ExceptionHandler:用于捕获所有控制器里面的异常,并进行处理 3、InitBinder: 用来设置 webDataBinder, w

Alan_ran的博客 2235

医学影像处理实战:用SimpleITK将CT数据重采样到统一尺寸(附完整代码)

本文针对医学影像分析中多源CT数据尺寸不一致导致深度学习模型训练失败的问题,提供了基于SimpleITK的实战解决方案。通过深入解析图像尺寸与间距的关系,详细阐述了如何通过调整体素间距进行重采样,而非简单补零,从而在保持图像物理尺寸不变的前提下,将数据统一到固定尺寸,确保输入网络的3D数据空间对齐且解剖信息准确。

weixin_29062671的博客 269

全局异常处理实现

​ 全局异常处理类通常用于捕获和处理应用程序中发生的所有异常,从而避免在代码的多个地方重复编写异常处理逻辑。​ 全局异常处理类有多种实现方式,每种方式都有其特定的应用场景和优势。以下是几种常见的全局异常处理类实现方式:​ 应考虑你的应用程序的特定需求、使用的技术栈以及团队的开发习惯。例如,如果你正在使用Spring框架开发Web应用程序,那么使用 @ControllerAdvice 和 @ExceptionHandler 注解可能是一个很好的选择。​ AOP允许你定义横切关注点,这些关注点跨多个类或方法。

LiuCJ_20000的博客 1976

【深度学习】基于BERT模型的情感分析(附实战完整代码+数据集)

情感分类是一个快速发展的研究领域,尽管众多模型和数据集在二分类任务中显示出很高的准确性,但细粒度的情感分类任务仍然是一个很大改进空间的领域。分析SST-5数据集,Munikar等人的先前工作表明,嵌入工具BERT允许使用简单的模型来实现最新的准确性。

aaaa_hsjsueu的博客 2万+

AD21导出gerber文件

文件–>制造输出–>Gerber Files 文件–>制造输出–>Gerber Files 通用、光圈和高级跟第一步一样 3.文件–>制造输出–>NC Drill Files 这个默认就可以了 主要参考视频来自bilibili添加链接描述 此篇博客主要是写给自己好记的,无其他商业用途 ...

新手小杨 1万+

SpringBoot——全局异常处理

SpringBoot提供了两个注解用于拦截异常 1、@ControllerAdvice:标注该类为全局异常处理类,默认拦截所有被触发的异常 2、@ExceptionHandler:标注方法,用于处理特定异常

生命的痕迹 4792

3D视觉实战之双目相机物体尺寸实时测量

视差图滤波能够将稀疏视差转变为稠密视差,并在一定程度上降低视差图噪声,改善视差图的视觉效果,但是比较依赖初始视差图的质量。的目标是获得左右两个相机的内参、外参和畸变系数,其中内参包括左右相机的fx,fy,cx,cy,外参包括左相机相对于右相机的旋转矩阵和平移向量,畸变系数包括径向畸变系数(k1, k2,k3)和切向畸变系数(p1,p2)以及其他一些畸变类型。:相比于昂贵的专业设备,便宜的双目摄像头可以显著降低成本,使得实时点云生成技术更加普及和经济实惠。

qq_53545309的博客 2099

全局异常拦截:@ExceptionHandler、@ControllerAdvice和ExceptionController

目录1、问题2、@ExceptionHandler和@ControllerAdvice2.1、Controller层全局异常声明2.2、测试2.3、测试结果2.4、小结3、ErrorController3.1、场景3.2、自定义ErrorController子类 4、总结在Controller接口中,程序运行时难免会有很多异常。此时,最简单的做法,是通过try-catch进行异常捕获,将异常信息转换成简洁友好的信息返回给前端。但这种方式,很难看且冗余(每个异常的地方都需要try-catch),如下所示:

weixin_37672801的博客 5075

Python地理数据处理 十七:植被物候提取和分析(Savitzky-Golay)

植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于生态工程保护建设和植被自然生长等因素,中国陆地生态系统发挥了重要的碳汇作用。因此,定量评估植被时空动态变化是制定生态系统可持续发展目标和衡量生态系统固碳潜力的重要前提,卫星遥感数据衍生的生态参量产品为研究长时间序列全球及区域植被时空变化提供了重要数据源。SG滤波能够对物候信息进行平滑,并提取其中的物候信息

amyniez的博客,欢迎交流讨论 4246

深度拆解 ‘High-Frequency Trading’ (HFT) 系统:解析如何在 100 纳秒内完成从网卡到 C++ 策略的响应

在100纳秒内完成从网卡到C++策略的响应,这是一项对技术栈每一个层面都进行极限优化的系统工程。它要求我们深入理解计算机体系结构、操作系统、网络协议和C++语言的底层机制。从物理距离的极致缩短,到高性能网卡和内核旁路技术,再到C++代码中每一个字节、每一个CPU周期的精打细算,HFT系统展现了人类对计算速度的永恒追求。这项技术不仅仅应用于金融交易,其背后的低延迟理念和实现方法,如DPDK、无锁编程、硬件加速等,正在逐渐渗透到其他对延迟敏感的领域,例如电信网络、边缘计算和工业自动化。

weixin_41455464的博客 1039

06 SpringMVC之全局异常处理机制(TBD)+拦截器+参数校验+上传文件

在程序中,使用拦截器在请求到达具体 handler 方法前,统一执行检测。

m0_46671240的博客 637

【无人机路径规划】基于强化学习实现多无人机路径规划附matlab代码

1 简介 本文提出一种基于强化学习实现多无人机路径规划。​ 2 部分代码 % This is used to measure the path length, service rate and risk explosure for each UAVs %% parameters function [PL,ServiceRate,Risk]=measure global N2; % divide [0,1]*[0,1] map into N2*N2 grid when calcul

qq_59747472的博客 6905

springboot中统一格式输出、全局异常捕获和自定义异常(三)

三、全局异常捕获和处理 3.1前言 本篇介绍全局异常捕获和处理方式,上两篇有介绍使用统一格式进行json格式输出和自定义异常捕获和处理,若不想使用自定义异常枚举类的方式,可以考虑全局异常捕获的方式进行异常的捕获和处理。 ...

排长性感的小屁屁 371

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

前端项目中的全局异常处理:全面捕获与处理各种异常

通过上述方法,你可以全面捕获和处理前端项目中的各种异常。这些方法不仅涵盖了接口调用、Vue 组件渲染,还包括了异步操作和 JavaScript 错误。综合运用这些技巧,你可以大幅提升前端应用的稳定性,保证在异常情况下也能给用户提供友好的体验。在实际项目中,可以根据具体需求和应用场景选择合适的异常捕获策略,并适当地进行组合使用。例如,使用 Axios 拦截器处理接口异常,结合 Vue 的和全局的来捕获其他类型的错误。这样可以确保异常能够在最合适的地方被处理,从而提高代码的健壮性和可维护性。

weixin_44803406的博客 2353

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SpringMVC的介绍和使用(2)--如何把控制层的数据渲染到页面,返回json数据, 定义全局异常处理以及拦截器

思考:原来在讲servlet时我们把数据保存在哪些对象中。request, 同一个请求内有效。 ---->EL表达式 获取相应范围的对象数据。session: 同一个会话有效。 4.如何使用重定向跳转 在方法的返回字符串的内容时加上redirect: 5. springmvc返回json数据 (1)什么时候需要返回json数据。(2)之前在servlet时如何返回json数据呢?springmvc如何返回json数据呢!(1)内置了一个jar. jackson的jar包 (2) 在contr

Ysuhang的博客 511

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SpringMVC06(SSM的整合与异常处理以及拦截器)

SSM整合 springmvc的学习已进入尾声,现在,我们将进行SSM的整合 首先,我们将进行基本项目结构的创建 随后,在maven配置文件里进行需要包的导入。 <dependency> <!--第三方事务包,服务器无法启动时启用--> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId>

charaface的博客 265

【Java开发】 Spring 06 :Spring MVC 实践详解(Spring Boot+MyBatis-Plus+JSP 项目)

MVC是一种软件架构思想,把软件按照模型--M,视图--V,控制器--C 来划分Model:模型层,指工程中的 JavaBean,用来处理数据 JavaBean 分成两类:一类称为实体类Bean:专门用来存储业务数据,比如Student,User一类称为业务处理Bean:指Servlet或Dao对象,专门用来处理业务逻辑和数据访问View:视图层,指工程中的html,jsp等页面,作用是和用户进行交互,展示数据Controler:控制层,指工程中的Servlet,作用是接收请求和响应浏览器。

尹煜的博客 3314

springMVC(文件上传--拦截器--全局异常处理器)

01-SpringMVC的请求-文件上传-客户端表单实现 文件上传3要素; method=“post” enctype=“multipart/form-data” type=“file” 02-SpringMVC的请求-文件上传-文件上传的原理 enctype为multipart/form-data enctype为application/x-www-form-urlencoded 请求体有什么不...

种一颗十年前的树 255

Spring入门06-SpringMVC02

2.继承 HandlerInterceptorAdapter 实际上最终还是 HandlerInterceptor 接口实现。 子类实现类 拦截器xml配置 多个拦截器实现 SpringMVC 框架支持多个拦截器配置,从而构成拦截器链,对客户端请求进行多次拦截操作。 拦截器代码实现 这里参考MyInterceptor01、MyInterceptor02代码 拦截器xml配置 拦截器应用 - 非法请求拦截 使用拦截器完成用户是

YiGeFive的博客 279

struts2全局异常处理及配合log4j异常日志记录

在编写代码时除了使用try catch来捕获异常之外,还可以用struts2的声明式异常处理,即在Action中直接抛出异常交给struts2来处理,并且在xml文件中进行相应的配置,如下: 01 <!--设置全局返回结果 --> 02 global-results> 03

Poet 1384

全局统一的异常处理方案

ExceptionHandler(BusinessException.class):表示要拦截的异常类型为BusinessException。

weixin_44506660的博客 301

自定义异常及其原理剖析

概述 在公司写项目的时候发现,虽说我们异常采用了全文捕获的方式,这一点不是很清楚,特此梳理文章来记录下,自己学习的过程 先要会用 首先我们要思考一个问题: 它是怎么样子捕获异常的?我们都知道我们前后端交互如下图: 过程如下: 前端通过Http请求访问后端 spring项目通过web.xml配置接受前端请求的方式参考Jsp + Servlet的项目(以后有机会补上),将请求都映射到spring-mvc.xml这个文件中(一般情况下) 这个样子就完成了前端到后端的映射 在以

qq_27416233的博客 459

黑马SpringBoot3+Vue3(实战篇)学习记录三:SpringBoot注册参数校验框架Validation、登入、JWT、拦截器、拦截器配置、Spring参数绑定

Spring Boot 通过 `@Validated` + `@Pattern` 校验参数,校验失败由 `@RestControllerAdvice` 全局捕获并返回统一 `Result`;登录成功后生成 JWT 令牌,拦截器在 `preHandle()` 中验证令牌,验证失败返回 401,通过 `WebConfig` 配置拦截路径并排除登录/注册接口;底层利用反射获取参数名,`ArgumentResolver` 从 `HttpServletRequest` 取值并完成校验。🎯

weixin_47708672的博客 436

项目学习:仿b站的视频网站项目06 -视频分类01

创建一个类来实现这个接口。通过实现该接口提供的方法来对请求前、请求中、请求后来进行处理,有点aop切面的味道。然后再创建一个类来实现这个接口。通过重写方法来将上面定义的接口注册进去管理。类import com} if(!// 图片 if(request . getRequestURI() . contains(URL_FILE)) {if(cookies!} }

weixin_44315397的博客 843
上一篇: 05.配置为开发模式、配置静态资源locations、自定义消息转化器、FastJson
下一篇: 07.整合jsp、整合freemarker、整合thymeleaf
dffxwe51549
博客等级 码龄12年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值