文章目录
[Spring MVC]未开启矩阵变量(MatrixVariable)的支持
错误信息:400 Bad Request - Missing matrix variable 'gender' for method parameter of type String
错误分析:@MatrixVariable
注解的使用是不安全的,在SpringMVC
中默认是关闭对其支持。
解决方法:如果要允许矩阵变量的使用,你必须把RequestMappingHandlerMapping
类的removeSemicolonContent
属性设置为false。该值默认是true的。可以在配置文件中,以下设置
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="removeSemicolonContent" value="false"/>
</bean>
[Spring MVC]缺少依赖(与jsp有关)
错误信息:java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
解决方法:
<!-- jstl -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- jstl-impl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
</dependency>
[Spring MVC]缺少依赖[commons-fileupload]
错误信息:Failed to introspect Class [org.springframework.web.multipart.commons.CommonsMultipartResolver] from ClassLoader [ParallelWebappClassLoader
`
错误定位:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 支持的其中一个属性,支持的最大文件大小,以字节为单位 -->
<property name="maxUploadSize" value="100000"/>
</bean>
分析:也许你会疑惑,以为CommonsMultipartResolver
就是一个直接处理文件上传的类,但Spring MVC
的底层还是servlet
,所以servlet
需要的jar包,Spring MVC
若要调用底层的api
也是需要导入相应的包,供servlet
调用。
解决方法:在pom.xml
下添加以下依赖(版本号不需要相同)
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
[Spring MVC]无法访问html文件
错误信息:The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
原因分析:dispatcherselvet
默认对html文件屏蔽
解决方法:在web.xml下添加以下配置
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
还有另外更加值得推荐一种方法,而且前一种方法可能和静态资源缓存配置产生冲突,导致缓存配置失败。
<mvc:default-servlet-handler/>
静态资源缓存配置失败
错误原因:以下两种配置,产生冲突
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<mvc:resources mapping="/static/**" location="/static/" cache-period="100000">
<mvc:cache-control max-age="1000" cache-public="true"/>
</mvc:resources>
推荐用以下配置取代前者
<mvc:default-servlet-handler/>
依赖冲突
错误信息:org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat]
解决方法:删除产生依赖冲突的依赖,比如导入了版本不一样的重复依赖。
redirect-view-controller不起作用
错误原因:不明,但是添加<mvc:annotation-driven/>
也不起效
解决方法:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<mvc:redirect-view-controller path="/hello" redirect-url="/test" keep-query-params="true"/>
特别要注意,RequestMappingHandlerMapping
必须在annotation-driven
前面。
jackson依赖不兼容或缺失
问题描述:
java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException
解决方法:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.9.5</version>
</dependency>
[Spring-Boot]oracle 数据库不支持字符集
错误信息:
SQL state [99999],不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK"
解决方法:添加以下依赖
<dependency>
<groupId>cn.easyproject</groupId>
<artifactId>orai18n</artifactId>
<version>12.1.0.2.0</version>
</dependency>
阿里中心仓库更新spring版本滞后
Failure to transfer org.springframework.boot:spring-boot-
starter-parent:pom:2.0.1.RELEASE from
http://maven.aliyun.com/nexus/content/groups/public/ was
cached in the local repository, resolution will not be
reattempted until the update interval of alimaven has
elapsed or updates are forced
原因:同标题
解决方法:pom文件里面改成低版本。
如
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/>
</parent>