同一Java Web项目中Angular无法调用Spring REST接口报404错误求助
问题根因
你现在的核心问题是Spring DispatcherServlet接管了所有根路径请求,要么是没正确映射静态资源/REST接口,要么是接口路径匹配规则和前端请求路径不匹配。
具体解决步骤
- 第一步:补全Spring MVC的基础配置
你把DispatcherServlet的路径设为/,所有请求都会被Spring拦截,默认不会处理WebContent下的静态文件,也可能没开启注解识别,先在Spring的gcsc-servlet.xml配置文件里补加以下配置:
记得在配置文件头部引入mvc命名空间:<!-- 放行静态资源,所有js/css/html/img等资源直接读取WebContent目录下的对应文件 --> <mvc:default-servlet-handler /> <!-- 开启注解驱动,确保@RequestMapping等注解能被正确识别 --> <mvc:annotation-driven />xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation属性值中追加:http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd - 第二步:对齐前后端接口路径
你当前Controller映射的接口路径是/user/authenticate,报错里的请求路径是/user/authenticate/多了末尾斜杠,Spring MVC 3.x版本默认开启末尾斜杠匹配,如果未开启就会报404,要么前端发请求时去掉末尾斜杠,要么加全局配置开启匹配规则:
另外注意你项目的上下文根是// 如果用Java配置类的话添加以下配置 @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setUseTrailingSlashMatch(true); } }GCSC,前端请求的完整路径应该是http://localhost:9080/GCSC/user/authenticate,不要漏了上下文根前缀,Angular可以统一配置baseHref为/GCSC/避免每次手写前缀。 - 第三步:确认Spring包扫描配置
检查gcsc-servlet.xml里有没有配置包扫描,确保能扫到LoginController所在的包:
没有的话补充配置,否则Spring识别不到你写的Controller,自然找不到对应接口。<context:component-scan base-package="LoginController对应的包全路径" />
验证方式
改完后先用Postman调用http://localhost:9080/GCSC/user/authenticatePOST接口,能正常返回结果后再让前端调用,即可解决404问题。
内容的提问来源于stack exchange,提问作者Zapp
相关产品推荐
相关产品推荐

