部署于AWS的REST服务无法运行问题求助
看起来你在AWS上部署的Spring Boot REST服务和Angular前端交互时遇到了问题,结合你提供的代码,我整理了几个最常见的排查方向,你可以一步步来定位:
1. 优先排查跨域(CORS)问题
如果你的Angular前端和AWS后端不在同一个域名/端口下,浏览器的同源策略会直接拦截这个请求——这是前后端分离场景里最常见的坑。你可以打开浏览器开发者工具(F12)的Network标签,看请求的状态,如果显示CORS error,那就是这个问题。
解决方法很简单,给你的Spring Boot Controller加上跨域注解:
@RestController @CrossOrigin(origins = "*") // 开发环境可以临时用*,生产环境记得改成你的前端域名,比如"https://your-frontend-domain.com" public class ProjectController { @RequestMapping(method = RequestMethod.GET, value = "/getProjects") public ArrayList<Project> getProjects() { ArrayList<Project> projectList = new ArrayList<Project>(); ProjectDao obj = new ProjectDao(); projectList = obj.getProjects(); return projectList; } }
2. 检查Angular的请求URL是否正确
你现在用的是相对路径/getProjects,如果前端不是和后端部署在同一个服务器/容器下,这个路径会指向前端所在的服务器,而不是AWS上的后端服务。
解决方法:把URL改成后端服务的完整地址,比如:
$http({ method: "GET", url: "http://你的AWS EC2公网IP:8080/getProjects" // 替换成你实际的服务地址和端口,如果用了ELB就填ELB的域名 }) .then(function success(response) { // 处理返回的项目列表 }, function error(response) { console.log("请求失败详情:", response); // 打印错误信息,方便排查 });
3. 先验证后端服务本身是否可访问
别先急着看前端,先用Postman或者curl直接调用后端接口,确认服务本身是正常的:
curl http://你的AWS EC2公网IP:8080/getProjects
如果这个请求也失败,那问题出在AWS的部署配置或者后端代码本身:
- 检查EC2的安全组:有没有开放后端服务的端口(比如8080),允许你的IP或者必要的来源访问(生产环境别随便开0.0.0.0/0)。
- 查看后端服务日志:登录EC2或者用AWS的日志工具,看服务启动时有没有报错,比如数据库连接失败、ProjectDao里的代码抛出异常。
- 如果用了Elastic Beanstalk部署,检查环境的健康状态,看有没有部署失败的提示。
4. 检查后端代码的依赖注入问题
看你的Controller代码,直接new ProjectDao()可能会有坑——如果ProjectDao里用到了Spring的依赖(比如JdbcTemplate、@Autowired的Bean),手动new的话这些依赖不会被Spring注入,会导致NullPointerException,接口返回500错误。
正确的做法是让Spring注入ProjectDao,而不是自己new:
@RestController @CrossOrigin(origins = "*") public class ProjectController { private final ProjectDao projectDao; // 构造方法注入(Spring官方推荐的方式) public ProjectController(ProjectDao projectDao) { this.projectDao = projectDao; } @RequestMapping(method = RequestMethod.GET, value = "/getProjects") public ArrayList<Project> getProjects() { return projectDao.getProjects(); } }
同时记得给ProjectDao加上@Repository注解,让Spring能扫描到这个Bean:
@Repository public class ProjectDao { // 你的getProjects()实现代码 }
按照上面的步骤一步步排查,应该能快速定位到问题所在。
内容的提问来源于stack exchange,提问作者Dil Shad Roshan

