问题描述:

纯注解配置SpringMVC程序,使用tomcat8.5.95版本启动,能启动成功并且访问index.jsp页面,但是访问/save时出现404无法访问,程序如下

解决办法:

一.更换高版本tomcat

以下的所有方法我全部都尝试过,但还是访问controller 404,最后更换了最新版本的tomcat才解决,所以在此把该方法列到第一个

二.检查jdk与spring版本是否兼容

Spring 框架的不同版本对于 JDK 的要求是有所区别的。一般来说,每个 Spring 框架版本都会声明它所支持的 JDK 版本范围。以下是一些常见的 Spring 框架版本对 JDK 的要求:

1. Spring Framework 5.x:
   - Spring 5.x 支持 JDK 8 及以上版本。这意味着你可以在 JDK 8、9、10、11、12、13、14、15 和 16 上运行 Spring Framework 5.x

2. Spring Framework 6.x:
   - Spring Framework 6基于JDK 17构建。换句话讲,若想使用Spring Framework 6那么你的JDK环境最低要求JDK 17

因此,如果你在使用 Spring MVC 6.x 版本,需要确保你的 JDK 版本符合其要求。当然,具体的兼容性要求最好还是查阅官方文档或者发布说明,以确保 JDK 和 Spring 版本之间的兼容性。

三.删项目重写一个

这一步骤是一种常见的排查问题的方法,通常用于排除项目中可能存在的难以定位的问题。通过删除并重新编写项目,你可以确保项目的结构和配置是干净的,并且可以排除一些潜在的问题

操作起来很简单,文件夹里找到项目直接删除即可

四.WEB-INF中导入lib

在传统的基于 Servlet 的 Web 应用中,通常会将项目所需的第三方库(JAR 文件)放置在 WEB-INF/lib 目录下。这些 JAR 文件包含了项目所需的各种依赖库

在现代的 Maven 或 Gradle 项目中,这些依赖通常会被管理工具自动下载并放置在项目的类路径中,而不需要手动放置在 WEB-INF/lib 目录下。但是IDEA有时会出错,导致WEB-INF下没有lib目录,这时候就需要自己手动添加了

在设置的项目结构中,选择工件

在WEB-INF目录下手动添加一个名称为lib的文件

lib的位置别错了

选择库文件,里面的东西全部添加

保存,退出,重新运行tomcat查看访问controller是否报错404

五.如果返回的数据为json,确保引入jackson依赖

在一个典型的 Spring MVC 应用中,当你向客户端返回一个对象时,Spring MVC 默认使用 HTTP 消息转换器(HTTP Message Converters)来将对象转换为合适的响应格式。这意味着,如果你的控制器方法返回一个对象,Spring MVC 将根据请求的 Accept 头部信息,将该对象转换为适当的响应格式,比如 JSON 或 XML

在默认情况下,Spring MVC 提供了一些内置的消息转换器,用于处理各种格式的数据。但是,如果你想要返回 JSON 格式的数据,通常会引入 Jackson 库(如 jackson-databind)来实现 JSON 的序列化和反序列化。Jackson 库提供了 MappingJackson2HttpMessageConverter,它可以将 Java 对象转换为 JSON 格式的数据,并且能够与 Spring MVC 集成

因此,当你在 Spring MVC 中想要返回 JSON 格式的数据时,通常会引入 Jackson 库,并确保 Spring MVC 配置正确地使用了 MappingJackson2HttpMessageConverter,以便将对象转换为 JSON 格式的响应

如果在一个纯注解的 Spring MVC 应用中,你想要返回 JSON 格式的数据,通常需要引入 Jackson 库,并且在控制器方法上使用 @RestController 或 @ResponseBody 注解来指示该方法返回 JSON 格式的数据。如果没有正确引入 Jackson 库或配置 Spring MVC 来处理 JSON 格式的数据,可能会导致返回的数据格式不符合预期,或者在访问控制器方法时出现 404 错误

六.确保所有的注解都加上了

1.Bean相关

检查@Controller注解,将该类注册为Bean

检查@RequestMapping是否加上,和后面的访问路径是否写错

检查@ResponseBody是否加上,无返回值可忽略

2.config相关

(1) SpringMvcConfig

是否扫到了bean所在的包

(2)  AbstractDispatcherServletInitializer实现是否正确

七.删除.m2文件下的repository

在 Java 开发中,".m2" 目录通常是 Maven 的本地仓库,用于存储项目的依赖库。当你在项目中使用 Maven 进行依赖管理时,Maven 会从远程仓库下载所需的依赖,并将其缓存到本地的 ".m2" 目录下。这样做可以加快构建过程,并在没有网络连接时也能够构建项目

有时候本地的依赖库可能会因为各种原因而损坏或不完整,导致构建失败或者出现奇怪的行为。通过删除并重新下载,可以确保本地的依赖库是完整的

八.webapp文件未被设为资源

仔细看看webapp文件夹上有没有这个小点,没有的话需要重新设置

还是在设置里的项目结构中,选择Fact

选择+新建web,选择你所创建的webapp的路径,确认返回,即可设置成功

喜欢的话点个赞吧

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐