Info模式下的隐形杀手(SpringMVC同时使用<mvc:resources.../>和FormattingConversionServiceFactoryBean时出现的问题)

天气一天比一天变的凉快了,而我一天天踩的坑更加贱了,首先在北京向各位问好,也给身边献身教育事业的亲朋好友们补上一句节日快乐!

今天早上手贱把项目误删了,不得不去SVN上去乞求了。我个人习惯项目运行的时候是debug模式跑着,但是,问题来了,启动竟然抛点异常。。。。。可是上周还好好的,让我有点怀疑人生了。但是还有一个但是,我把日志模式改为info模式,这个贱贱的错误又隐藏起来了,项目一切正常运行,是没问题的。声明一点啊,这个错误不是跟日志的模式有关。

出现问题的根源,就是springmvc框架加载项目的时候,同时使用了加载静态资源的<mvc:resources>和定义了全局日期转换器。

1     <!-- 4、加载项目中的静态资源 -->
2     <mvc:resources location="/js/" mapping="/js/**" />
3     <mvc:resources location="/images/" mapping="/images/**" />
4     <mvc:resources location="/css/" mapping="/css/**" />
5     <mvc:resources location="/" mapping="/*.html" />
6     <!-- 日期统一转换 -->
7     <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
8     </bean>
9     <mvc:annotation-driven conversion-service="conversionService" />

以这种骚姿态启动项目出现的报错信息,各位先有个印象:

 1 2017-09-11 12:59:42 3240 [localhost-startStop-1] DEBUG o.s.beans.TypeConverterDelegate - Original ConversionService attempt failed - ignored since PropertyEditor based conversion eventually succeeded
 2 org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.util.ArrayList<?>] to type [java.util.List<org.springframework.core.io.Resource>] for value ‘[/]‘; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.util.ArrayList<?>] to type [org.springframework.core.io.Resource]
 3     at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
 4     at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192)
 5     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:173)
 6     at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576)
 7     at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:603)
 8     at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:203)
 9     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1531)
10     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1490)
11     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1230)
12     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
13     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
14     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
15     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
16     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
17     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
18     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:778)
19     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
20     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
21     at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667)
22     at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:633)
23     at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:681)
24     at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:552)
25     at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493)
26     at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
27     at javax.servlet.GenericServlet.init(GenericServlet.java:158)
28     at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1282)
29     at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1195)
30     at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1085)
31     at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5318)
32     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5610)
33     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
34     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1572)
35     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1562)
36     at java.util.concurrent.FutureTask.run(FutureTask.java:262)
37     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
38     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
39     at java.lang.Thread.run(Thread.java:744)
40 Caused by: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.util.ArrayList<?>] to type [org.springframework.core.io.Resource]
41     at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:313)
42     at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:195)
43     at org.springframework.core.convert.support.CollectionToCollectionConverter.convert(CollectionToCollectionConverter.java:87)
44     at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:35)
45     ... 36 common frames omitted

错误提示中最核心的部分是:Failed to convert from type [java.util.ArrayList<?>] to type [java.util.List<org.springframework.core.io.Resource>] for value ‘[/WEB-INF/statics/js/]‘翻译出来就是:

      尝试将‘[/WEB-INF/statics/js/]从java.util.ArrayList<?> 转换到java.util.List<org.springframework.core.io.Resource>的时候失败了。

    【为什么会出现这个问题?由于本人能力有限,还没有真正的了解到具体说法,如朋友你知底,请留言共勉,万分感谢】

但是出现问题我们必须以最快的速度干掉它,那么解决办法我给各位提供了2种(既然是不能用这种方式同时出现,那么我就只允许他们只出现一种):

1、去除全局日期转换器

这种方式的配置呢,我们主要就是去解决项目中pojo类中日期属性的格式化问题,在这儿我们也可以不用这种方式去转换,而是通过在对象的时间属性上添加注解去格式化,具体看码:

 1 public class MortgagerInfo implements Serializable{
 2
 3     private String id;                            //主键
 4     private String vin;                         //VIN码
 5     private String mortgagerName;                //抵押权人
 6     private String masterMortgagerNumber;        //主合同号
 7     private String mortgagerNumber;                //抵押合同号
 8     private Double mortgagerCost;                //抵押金额
 9     @DateTimeFormat(pattern="yyyy-MM-dd")
10     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
11     private Date mortgagerTime;                    //抵押登记日期
12     private String mortgagerImgUrl;                //抵押信息图片
13     @DateTimeFormat(pattern="yyyy-MM-dd")
14     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
15     private Date relieveTime;                    //解除日期
16     private Integer mortgagerStatus;            //抵押标记
17     private String approvalAuthority;            //批准机关

2、不要使用<mvc:resources>标签去加载静态资源,而是用以下方式加载,意思就是没有映射到的URL请求交给默认的web容器中的servlet进行处理:

 1    <!-- 4、加载项目中的静态资源 -->
 2     <!-- <mvc:resources location="/js/" mapping="/js/**" />
 3     <mvc:resources location="/images/" mapping="/images/**" />
 4     <mvc:resources location="/css/" mapping="/css/**" />
 5     <mvc:resources location="/" mapping="/*.html" /> -->
 6     <!-- 日期统一转换 -->
 7     <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
 8     </bean>
 9     <mvc:annotation-driven conversion-service="conversionService" />
10
11     <mvc:default-servlet-handler />

现在用debug启动,错误消失(走到这儿可别忘了博主在文中请教的问题,留言区不见不散)。

时间: 2024-10-04 09:49:01

Info模式下的隐形杀手(SpringMVC同时使用<mvc:resources.../>和FormattingConversionServiceFactoryBean时出现的问题)的相关文章

SpringMVC同时使用&lt;mvc:resources … /&gt;和日期转换Formatter时出现问题的解决方法

很久没更新博文了,不是没有学习,而是很多东西记在OneNote里面,收获很多啊,因为各种杂事,所以对于博客很久没更新了. 个人觉得:博客比起OneNote或者为知笔记之类的云笔不同在于博客应该记载的是比较成体系的东西,所以很多东西我准备统一回顾我学到的东西后,再成体系的更新在这里来. 废话说多了,先处理RT的问题. 一.问题由来 在学习SpringMVC的过程中,对于URL的拦截,我使用了RESTful,这是一种在形式上没有动词没有后缀结尾的URL表现形式,利用PUT/POST/DELETE/G

This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed(在64位模式下运行安装了32位的Oracle客户端组件时,会发生此问题)

部署win服务时出现下面的问题: 在事件查看器中看到如下错误: 日志名称: Application来源: ***调度服务日期: 2014/5/21 12:53:21事件 ID: 0任务类别: 无级别: 错误关键字: 经典用户: 暂缺计算机: ams-webserver描述:Service cannot be started. Achievo.Utility.DataAccess.DbException: Attempt to load Oracle client libraries threw

SpringMVC 的&lt;mvc:resources&gt;使用映射路径展示文件服务器上的图片

<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value&g

springmvc模式下的上传和下载

接触了springmvc模式后,对上一次的上传与下载进行优化, 上次请看这里. 此处上传的功能依旧是采用表格上传.文件格式依旧是 <form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data"> 后台则是 @RequestMapping("/upload") public Str

混合开发模式下主流移动开发平台分析

关键字:AppCan 移动开发平台 移动应用 Hybrid App在过去的两年中已经成为移动界的核心话题,但是作为一名Web开发者来说要如何站在移动互联网的浪潮之巅呢?是选择学习原生开发,研究Java.Object-C.C#等语言,还是选择继续使用网页开发,容忍HTML5功能的局限性?就在开发者左右为难的情况下Hybrid App作为一个折中的解决方案诞生了.那么究竟什么才是Hybrid App呢?HybridApp概念Hybrid App:Hybrid App is a mobile appl

[PHP] swoole在daemonize模式下,chdir失效问题

swoole version: 1.9.6 其实跟swoole的版本无关,因为原代码体系,fpm模式下,在启动的时候,是使用 chdir 函数改变了当前目录的,而其它代码在做类的自动加载的时候,都是写的相对地址,而不是绝对地址. 问题就来了,swoole是多进程的,在daemonize模式下,chdir改变当前目录,在其它进程下是不生效的,所以有时候,不使用daemonize没问题,而使用daemonize会莫名的出现找不到类的情况. 解决方法是,在几个启动的回调里面同时也改变一下目录 $ser

Spark sql 在yarn-cluster模式下找不到表

在hive里建一个数据库test,在数据库里建了一张表user,然后在Spark程序中使用Spark sql读取这张表 "select * form test.user" 当部署模式是spark stand模式和yarn-client模式时,程序可以正常运行,但yarn-cluster模式就报了找不到"test.user"表的错误. 解决办法: spark和hive整合,把hive-site.xml加到spark根目录的conf下,所以,要在提交Spark任务的时候

Play生产模式下java.io.FileNotFoundException那点事

之前”用Scala+Play构建地理数据查询接口”那篇文章里,用到的数据是json格式的文本文件area.json,存放在conf/jsons文件夹下.最开始是放在public/文件夹下,在线上准生产模式下运行: activator dist 得到mosquito-1.0.zip压缩包,解压后: 去/bin目录下运行mosquito脚本报错: java.io.FileNotFoundException 然后就去解压的mosquito-1.0/看发现并没有public文件夹,由此可见public文

检测到在集成的托管管道模式下不适用的 ASP.NET 设置。

我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 为什么会出现以上错误? 在IIS7的应用程序池有两种模式,一种是“集成模式”,一种是“经典模式”. 经典模式 则是我们以前习惯的IIS 6 的方式. 如果使用集成模式,那么对自定义的httpModules 和 httpHandlers 就要修改配置文件,需要将他们转移到<modules