如何从Angular控制器向Spring控制器传递数据?附代码示例
完整实现:从Angular控制器向Spring控制器传递JSON数据
看起来你已经搭好了基础的代码框架,但还需要补全几个关键部分才能让Angular和Spring成功完成数据传递。我来给你梳理完整的实现方案:
1. 修正Spring Controller代码
你的Spring Controller目前没有正确接收JSON请求体,必须加上@RequestBody注解,才能把请求中的JSON数据自动绑定到QuotationDO对象上。另外我保留了你原本返回ModelAndView的逻辑(适合服务端渲染场景),如果是前后端分离架构,也可以改成返回JSON格式的响应:
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.http.MediaType; @RequestMapping(value = "/saveNamedDrivers", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) public ModelAndView saveNamedDrivers(@RequestBody QuotationDO user, HttpServletRequest request, HttpSession session, HttpServletResponse response) { System.out.println("请求已成功接收"); System.out.println("接收的用户数据:" + user.toString()); // 这里可以添加你的业务逻辑,比如将数据保存到数据库 return new ModelAndView("premium/premium"); }
关键注意点:
- 确保
QuotationDO类的属性和Angular传递的JSON字段名称完全匹配(大小写敏感) - 类必须包含无参构造函数和对应的getter/setter方法,否则Spring无法完成对象映射
2. 补全Angular的$http请求代码
你需要完善请求配置,包括设置正确的请求头、传递符合格式的JSON数据,同时处理成功和失败的回调逻辑:
// 假设CONTEXT_PATH已正确定义,比如"/your-application/" $http({ method: 'POST', url: CONTEXT_PATH + 'saveNamedDrivers', headers: { 'Content-Type': 'application/json' // 必须设置该请求头,告知服务器请求体为JSON格式 }, data: { // 这里填写要传递的字段,需和QuotationDO的属性一一对应 name: "John Doe", age: 30, licenseNumber: "ABC123" // 根据你的QuotationDO类补充其他字段 } }).then(function successCallback(response) { // 请求成功后的处理逻辑,比如提示用户或页面跳转 console.log("数据保存成功"); // 如果需要跳转页面,可使用$location服务:$location.path('/premium'); }, function errorCallback(response) { // 请求失败的处理逻辑,比如打印错误信息或提示用户 console.error("数据保存失败:", response.statusText); });
额外提示:如果你的Angular版本是1.x,记得确保$http(以及需要用到的$location等服务)已经注入到控制器中,示例如下:
angular.module('yourApp').controller('YourController', ['$http', '$location', function($http, $location) { // 上述$http请求代码写在这里 }]);
3. 常见问题排查清单
- 跨域问题:如果Angular和Spring运行在不同端口/域名下,需要在Spring端配置跨域支持,可以给Controller方法添加
@CrossOrigin注解,或者配置全局CORS规则 - 字段不匹配:检查
QuotationDO的属性名和Angular传递的JSON键名是否完全一致(比如Spring里是licenseNumber,Angular里不能写成licensenumber) - 请求头缺失:如果未设置
Content-Type: application/json,Spring可能无法识别请求体格式,导致@RequestBody绑定失败
内容的提问来源于stack exchange,提问作者MohanaKrishnan S
相关产品推荐
相关产品推荐

