引发人类出行方式革命的飞行汽车渐行渐近

作者: 第一财经   日期:2024-03-18 14:41 阅读:0  来源:第一财经  
分享到:
邮箱:

据第一财经报道

先是今年全球首场科技展CES盛会上韩国现代汽车推出了首款电动飞行出租车S-A2;后是上海峰飞航空的飞行汽车“盛世龙”成功完成全球首条跨海跨城空中航线(深圳—珠海)的首飞;紧接着,马斯克旗下SpaceX公司支持的飞行汽车公司Alef Aeronautics对外宣布名下的飞行汽车Alef  Model A已经获得2850多份预订单。密集而招人眼球的资讯明确提示,引领人类出行方式升级与革命的飞行汽车正提速驶来。

像传统航空飞机那样,飞行汽车也能上天飞行,只是飞行高度控制在1000米以下,同时载客数量也远逊于前者;另外,与地面小型载人汽车相比,部分飞行汽车兼具了陆空驰行功能,只是目前严格意义上的飞行汽车专指电动垂直起降飞行器(eVTOL),相应地,全球许多企业基本上都放弃了飞行汽车的地面行驶功能,转而专注飞行功能的开发与完善。

全球首条跨海跨城空中航线(深圳—珠海)首飞

经济学与社会学意义

按照摩根士丹利预测,到2030年,全球将有1.2万架飞行汽车投入商用,市场规模达3000亿美元,2040年市场规模超过1.5万亿美元,2050年市场规模达9万亿美元;另一方面,在产业经济学看来,任何一个产品都携带着产业关联效应。从上游看,飞行汽车可以拉动航空铝材、镁合金及特殊玻璃等碳纤维技术集结而成的原材料需求,中游覆盖着发动机、电池以及整机制造等产业链的核心部位,而下游则涉及陆空交通基础设施搭建与运营服务供给等产业价值的释放,同时飞行汽车的应用场景十分丰富。

相比于产业与经济价值,飞行汽车所彰显出的社会意义更为普惠与显著,最为重要的就是必然引爆人类出行方式的重大革命。联合国的一项权威报告指出,高速发展的城市为居民创造了日益增长的流动性需求,到2050年,全世界68%的人口都将居住在城市地区,外出的人们将不得不忍受交通大面积与长时间拥堵的煎熬。但有了飞行汽车,交通载具扩展到了空中,由此便形成了城市空中交通(UAM),UAM不仅将空中交通与地面交通结合在一起,而且空中交通还分为不同的层,形成城市的立体交通系统,人类出行空间也从二维层面扩张到三维层面,结果是地面交通需求压力得到有效分解,长期困扰城市管理者的交通拥堵问题也由此得到根本性解决。

不错,飞机尤其是商用客机与直升机早已打开了公众航空出行的空间,但这两种交通工具不仅供给能力有限,而且由于经营与消费成本的高昂,始终只能停留于小众市场。拿直升机来说,一个企业如果要想将它投入商用,不算后期运维成本,前期投入的生产制造或者购买费用就在800万到1亿元人民币之间,而在消费成本方面,以目前国内的广深通勤航线为例,即便是运营商进行了补贴,乘客费用支出仍为地面交通的10倍左右。相对而言,在大规模成熟应用条件下,飞行汽车的里程单价仅为地面打车的2~3倍,性价比更高;而不同于直升机需要宽大固定的停机坪,飞行汽车只有一片足够用的空地比如城市楼顶、闲置地面等便可顺利降落与起飞,综合成本更低;另外,通过手机平台一键预约即可乘坐,路程耗时仅为地面出行的20%~25%,整体出行效率也更优。

稍作延伸性思考还会发现,飞行汽车十分显著的社会学意义其实远不只停留在交通出行身上。伴随着城市化的进展,全球各大城市如雨后春笋涌现的摩天大楼尽管构造出了都市的风景线,但也给超高层消防、超高层医疗救援制造出了新的难题,现如今的云梯只能达到15~16层,再高的就无能为力了,但eVTOL则没有限制,完全可以确保消防和医疗救援力量快速抵达与近距离、高效率救助;另一方面,eVTOL在延伸公众出行空间的同时,纯电动力不仅可以支持自身实现零排放,更能够减少地面汽车的汽柴油消耗,对环境的支持与响应更为友好,更有利于人类减少碳足迹。

政策赋能与市场加力

作为低空经济的重要组成部分,飞行汽车横跨飞机制造、汽车制造、电动航空器制造三大制造领域,涉及新能源、航天航空、高端制造、自动驾驶等战略性新兴行业,往往是新业态与新型产业组织孕育与成长的重要载体,对一国产业经济结构升级以及综合经济质量的提升将发挥着关键作用,由此也成为各国重大战略性赛道,美国联邦航空管理局甚至用“输不起的竞争”来形容eVTOL的重要性。

目前来看,主要经济体对于eVTOL在政策上普遍表现出积极与开放态度,其中美国军方启动了“敏捷至上”项目,支持民营企业运用政府资源加快eVTOL飞行器的研发,欧洲航空安全局则为eVTOL飞行器提前制定了一套规划方案以及详细的适航标准,日本政府将为“飞行汽车”开设新的飞行员驾照,以及修理“飞行汽车”的机械师执照,韩国针对eVTOL的管制问题出台了“K-UAM”空中交通规划方案。相比而言,中国围绕eVTOL所表达出的政策更具系统性与前瞻性。工信部等四部门印发的《绿色航空制造业发展纲要(2023~2035年)》提出到2025年电动通航飞机投入商业应用试点运行,至2035年新能源航空器成为发展主流,且《无人驾驶航空器飞行管理暂行条例》自今年1月1日起正式施行。具体支持举措上,除了将北京市延庆区等全国13个地区划定为无人驾驶航空试验基地外,湖南、四川、安徽三省的全域被圈定为低空飞行的改革试点省份。

政策的呵护激发了市场力量的更高热情,飞行汽车赛道的商业化竞争呈现出四大清晰矩阵,其中既有航空业霸主波音、空客、贝尔以及日本航空的身影,也有大众、现代、通用和特斯拉等新旧汽车头部玩家的阵容,更有谷歌、英特尔等全球科技巨头迈入的脚步,还有许多的初创公司如美国的Joby Aviation、德国的Volocopte、日本的SkyDrive以及中国的峰飞航空等。统计数据显示,全球eVTOL研发与制造企业从2022年的600多家增加到2023年的800多家,eVTOL市场订单超过1.3万架。

总体上看,飞行汽车已经走出了最初的概念畅想阶段,而且依照程序,一款eVTOL产品首先要在设计上拿到TC型号合格证,然后必须申请到生产上的PC合格证,最后获得飞行上的AC适航证,才能投入商用,对照而言,目前eVTOL产品达标不成问题,并正在展开大面积试飞,虽然全球还没有一家企业拿到AC适航证,但初期商业化运营阶段在物流配送、农药喷洒、观光旅游等物化场景特殊商用所积累起来的经验,必将为未来大规模商用尤其是载人商用起到集腋成裘之效。

闯关破障与后续走势

按照行业权威专家的判断,在2030年前,飞行汽车主要还是早期商业示范运行;2030~2050年,逐渐进入飞行汽车商业化运营时代;2050年后,将迎来城市空中交通发展的时代,也就是说,至少需要15年的时间,飞行汽车才可真正在载人商用领域大展拳脚,其间无论是在技术环节还是非技术领域,飞行汽车都须进一步闯关破障。

由于受到地球引力、空气阻力的影响,同样的锂电或者氢能电池载配在地面汽车上可能续航数百公里,但安装在飞行汽车身上续航里程却只有几十分钟,而且由于需要克服自身在空中的重力,飞行汽车又不能无限制叠加电池,因此,截至目前飞行汽车动力方面仅可满足省内城市之间的短距需求,延长飞行距离还需要电池能量密度在技术上获得进一步精炼与提升;另外,飞行汽车尽管可以安装多个螺旋桨翼从而增大安全冗余,但如同直升机的单个桨翼飞行过程中发出巨大噪音一样,飞行汽车同样没有解决低空状态下对城市的噪音污染问题,尤其是飞行汽车的许多升降机坪都靠近居民生活与办公区,且数量规模相较直升机更为庞大,飞机密集度也更高,最终产生的噪音也会更大,相关阻挠与屏蔽技术的成熟还需要较长时期的积累。

非技术因素方面,飞行汽车未来批量化商业运营,必然带动城市人流、物流、资金流和信息流的激增,随之对着陆点、停靠地以及充电站等设施提出了综合性与及时性要求,而这些条件的满足又需要以城市规划的调整以及地面物理设施的位移与改建为基本前提,从论证到实施绝非一蹴而就;空域管理方面,飞行汽车的航线制定、路径规划、飞行分隔、冲突规避、空域等待以及空中执法和事故责任划分等,都需要根据情况重新制定一套新的“空中交通管理体系”,而到目前为止,全球没有任何一个国家针对飞行汽车制定清晰、统一的标准以及规章制度,无经验可循的背景下,相关制度的落地时滞就会被拉长。

显然,以时间换空间将是飞行汽车的客观选择,而在积力蓄势过程中,整个飞行汽车行业将朝着以下四个方向移动:

首先,竞争主体上,由分兵单列走向并购整合。飞行汽车是一个资本与技术密集型行业,技术上要求多学科、多技术的集合匹配,资金上仅商业化之前的耗资就达10亿美元,后期的运维成本更是一个无底洞,远非一般企业所能承受与坚持,由此必然刺激或倒逼企业展开整合并购,行业竞争生态将由初期的单打独斗升级为联合协作。

其次,市场路径上,由先面向B端服务到后走向C端服务。商业化初期,飞行汽车在物流运输、医疗救护、消防灭火、应急救援以及公共安全等领域的服务供给往往满足的是B端企业需求,运行过程一方面进行着飞行试验,让飞行汽车渐次融入城市路空交通运输体系,条件成熟后便进入C端,展开载人服务。

再次,商业模式上,由先“打飞的”到后“买飞车”。短期看,价格昂贵的飞行汽车对于绝大多数消费者而言是难以承受的,而且还有高昂的存停成本、管理维护成本等,因此,飞行汽车的商业化将首先表现为平台运营模式,类似“网约车”的形式向企业、个人提供“打飞的”服务,而随着技术的进步拉低了购买成本后,“买飞车”将逐步普及开来。

最后,驾驶方式上,由有人驾驶与无人驾驶并举到无人驾驶为主。目前,欧美等国主流飞行汽车公司都采用了有人驾驶模式,但中国、日本等国则主张无人驾驶,比较起来后者不仅占据成本优势,而且安全度显然大于前者。在自动驾驶模式下,不仅可以通过电子围栏实现准确的飞行隔离,还能精确设置定点航线,飞机自动地将乘客运到终点,整个过程实现无人化驾驶操作,从而大大降低飞行失误的概率。

(作者系中国市场学会理事、经济学教授)

文章作者

FreeMarker template error (DEBUG mode; use RETHROW in production!): The following has evaluated to null or missing: ==> info.copyRight [in template "1/default/newsDetail.html" at line 740, column 24] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use [#if myOptionalVar??]when-present[#else]when-missing[/#if]. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${info.copyRight.content!""} [in template "1/default/newsDetail.html" at line 740, column 22] ---- Java stack trace (for programmers): ---- freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) at freemarker.core.UnexpectedTypeException.newDesciptionBuilder(UnexpectedTypeException.java:85) at freemarker.core.UnexpectedTypeException.(UnexpectedTypeException.java:48) at freemarker.core.NonHashException.(NonHashException.java:49) at freemarker.core.Dot._eval(Dot.java:48) at freemarker.core.Expression.eval(Expression.java:83) at freemarker.core.DefaultToExpression._eval(DefaultToExpression.java:88) at freemarker.core.Expression.eval(Expression.java:83) at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:100) at freemarker.core.DollarVariable.accept(DollarVariable.java:63) at freemarker.core.Environment.visit(Environment.java:330) at freemarker.core.Environment.visit(Environment.java:336) at freemarker.core.Environment.visit(Environment.java:336) at freemarker.core.Environment.process(Environment.java:309) at freemarker.template.Template.process(Template.java:384) at com.jspxcms.common.file.FtpFileHandler$11.doInFtp(FtpFileHandler.java:270) at com.jspxcms.common.file.FtpTemplate.execute(FtpTemplate.java:58) at com.jspxcms.common.file.FtpFileHandler.storeFile(FtpFileHandler.java:257) at com.jspxcms.core.html.PInfo.doMakeHtml(PInfo.java:105) at com.jspxcms.core.html.PInfo.makeHtml(PInfo.java:48) at com.jspxcms.core.html.HtmlServiceImpl.makeInfo(HtmlServiceImpl.java:56) at com.jspxcms.core.html.HtmlServiceImpl$$FastClassBySpringCGLIB$$ca793f53.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:736) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:283) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:671) at com.jspxcms.core.html.HtmlServiceImpl$$EnhancerBySpringCGLIB$$24b34a51.makeInfo() at com.jspxcms.core.service.impl.InfoServiceImpl.updateHtml(InfoServiceImpl.java:879) at com.jspxcms.core.service.impl.InfoServiceImpl.pass(InfoServiceImpl.java:526) at com.jspxcms.core.service.impl.InfoServiceImpl$$FastClassBySpringCGLIB$$3b2ee07e.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:736) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:283) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:671) at com.jspxcms.core.service.impl.InfoServiceImpl$$EnhancerBySpringCGLIB$$2c00c0b2.pass() at com.jspxcms.core.web.back.InfoController.auditPass(InfoController.java:614) at com.jspxcms.core.web.back.InfoController$$FastClassBySpringCGLIB$$6206d7eb.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:736) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor$1.proceed(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:82) at org.apache.shiro.authz.aop.AuthorizingMethodInterceptor.invoke(AuthorizingMethodInterceptor.java:39) at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor.invoke(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:115) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:671) at com.jspxcms.core.web.back.InfoController$$EnhancerBySpringCGLIB$$5a4b906f.auditPass() at sun.reflect.GeneratedMethodAccessor1413.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:854) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:765) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at com.jspxcms.core.support.BackSiteFilter.doFilter(BackSiteFilter.java:50) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:178) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.jspxcms.core.support.CsrfFilter.doFilterInternal(CsrfFilter.java:47) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:128) at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66) at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:367) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:882) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1647) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:750)