AngularJS —— 使用 ngResource、RESTful APIs 和 Spring MVC 框架提交数据 【已翻译100%】-阿里云开发者社区

开发者社区> 青衫无名> 正文

AngularJS —— 使用 ngResource、RESTful APIs 和 Spring MVC 框架提交数据 【已翻译100%】

简介:
+关注继续查看

本文为开发者呈现了一些概念和相关的示例代码,介绍了用ngResource($resource)服务POST方式提交数据到和服务器端SpringMVC环境下的RESTFul APIs。示例代码可以在如下页面找到:http://hello-angularjs.appspot.com/angularjs-restful-apis-post-method-code-example。相对于使用$http服务,我更喜欢这种方法的主要理由是ngResource允许你使用抽象方式(例如$resource类),你可以使用它的实例上的处理方法与RESTFul APIs交互。这样就可以简单方便地实现RESTFul集成。在$resource类的对象上,可以直接调用处理方法(例如get、save等)。因此,在其实例上,就可以使用"$"作为前缀直接调用这些方法。具体的例子如下所示。

这篇文章里,用以下两个情景用例来解释:

  • 保存/持久化 新的数据对象
  • 更新存在的数据对象

代码片段包含了AngularJs代码和Spring MVC代码,以能够让你简单快速的上手。

想要$resource 服务工作,需要添加一段实际代码:

应用angular-resource.js文件,你可以使用Google Hosted Libraries来实现。

下面采用的代码是最新的angularJs版本。(下面就是引入服务的代码)

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular-resource.js">


下面的代码告诉你如何在创建控制器时引入ngResource模块和注入$resource服务:

var helloApp = angular.module("helloApp", [ 'ngResource' ]);
helloApp.controller("HttpController", [ '$scope', '$resource',     function($scope, $resource) {
    //
    // 在这写你的实际业务代码...   
    //                                    
} ]);

保存/持久化新对象 (其实就是传给后台存进数据库的一个过程)

下面的代码演示了如何使用POST方法提交form表单中的user信息(这部分是由controller来做),controller会把uers信息提交给REST URL “/user/new”(这部分是Spring MVC的控制器执行)。

AngularJS代码

var helloApp = angular.module("helloApp", [ 'ngResource' ]);
helloApp.controller("HttpController", [ '$scope', '$resource',     function($scope, $resource) {
    $scope.users = [
        { 'firstname':'Ajitesh',
        'lastname':'Shukla',
        'address':'Hyderbad',
        'email':'ajitesh101@gmail.com'},
        { 'firstname':'Sumit',
            'lastname':'Jha',
            'address':'Muzaffarpur',
            'email':'sumitjha2011@yahoo.com'},                                                                        
        ];

    $scope.saveUser = function(){                            
        // 创建一个resource对象
        //
        var User = $resource('/user/new');
        // 调用save方法
        //(其实和我们$http.post(url,data).success(function(){})是一样一样的,只是它封装一下而已)

User.save({firstname:$scope.firstname,lastname:$scope.lastname,address:$scope.address,email:$scope.email}, function(response){
            $scope.message = response.message;
        });

    }

} ]);

Spring MVC 代码

请注意User对象的字段要和JSON数据的要一致。同时确保Jackson包已经引入了,并且正常工作了。这是最重要的步骤。我推荐参考这篇文章 how to fix 415 Unsupported Mediatype error 来帮助你实现前面两个步骤。(1.Spring转对象的时候,是按照字段名来转的,比如你的Java的User对象的firstname会绑定Json对象的firstname,所以需要保持一致,否则帮出来的数据可能不对。2.不引人Jackson包,那么Json对象和Java对象不能想换转化,也就不能正常工作了)

/ 创建一个新user
//
@RequestMapping(value = "/user/new", method = RequestMethod.POST)    
public  @ResponseBody String saveUserRestful( @RequestBody User user )   {        
    //
    // 处理输入参数的代码
    //    
    String response = "{\"message\":\"Post With ngResource: The user firstname: " + user.getFirstname() + ", lastname: " + user.getLastname() + ", address: " + user.getAddress() + ", email: " + user.getEmail()+"\"}";
    return response;
}

更新已存在的数据对象

下面的代码演示了如何通过POST方法提交表单信息来更新user对象,请求会发送到服务器的REST URL "/user/{id}",也包括Spring MVC的方法。

Spring MVC 代码

请注意User对象的字段要和JSON数据的要一致。同时确保Jackson包已经引入了,并且正常工作了。这是最重要的步骤。我推荐参考这篇文章 how to fix 415 Unsupported Mediatype error 来帮助你实现前面两个步骤。(1.Spring转对象的时候,是按照字段名来转的,比如你的Java的User对象的firstname会绑定Json对象的firstname,所以需要保持一致,否则帮出来的数据可能不对。2.不引人Jackson包,那么Json对象和Java对象不能想换转化,也就不能正常工作了)

/ 创建一个新user
//
@RequestMapping(value = "/user/new", method = RequestMethod.POST)    
public  @ResponseBody String saveUserRestful( @RequestBody User user )   {        
    //
    // 处理输入参数的代码
    //    
    String response = "{\"message\":\"Post With ngResource: The user firstname: " + user.getFirstname() + ", lastname: " + user.getLastname() + ", address: " + user.getAddress() + ", email: " + user.getEmail()+"\"}";
    return response;
}

更新已存在的数据对象

下面的代码演示了如何通过POST方法提交表单信息来更新user对象,请求会发送到服务器的REST URL "/user/{id}",也包括Spring MVC的方法。

ngularJS代码

var helloApp = angular.module("helloApp", [ 'ngResource' ]);
helloApp.controller("HttpController", [ '$scope', '$resource', function($scope, $resource) {
    $scope.users = [
        { 'firstname':'Ajitesh',
        'lastname':'Shukla',
        'address':'Hyderbad',
        'email':'ajitesh101@gmail.com'},
        { 'firstname':'Sumit',
            'lastname':'Jha',
            'address':'Muzaffarpur',
            'email':'sumitjha2011@yahoo.com'},                                                                        
        ];

    $scope.updateUser = function(){                            
        // Create a resource class object
        //
        var User = $resource('/user/:userId', {userId:'@id'});
        // Create an instance of User resource
        var user = User.get({userId:25});
        // Update the new values entered in the form fields
        //
        user.id = 25;
        user.firstname = $scope.firstname;
        user.lastname = $scope.lastname;
        user.address = $scope.address;
        user.email = $scope.email;
        // Call '$' prefixed action menthod to post ("save" )
        //
        user.$save(function(response){
            $scope.message = response.message;
        });
        // Push the new objects in the $scope.users                     
        //
        $scope.users.push({ 'firstname':$scope.firstname, 'lastname': $scope.lastname, 'address':$scope.address, 'email':$scope.email });
        $scope.firstname='';
        $scope.lastname='';
        $scope.address='';
        $scope.email='';
    }        

} ]);

Spring MVC 代码

请注意下面几点

-用例的路径变量(就是"/user/{id}"这东西)

-Java的User对象要和Json对象匹配(字段名,或者说是属性名)

-确保Jackson包引入并且正常工作(确保你后台能正常转化Json和java对象)

// 更新 user
//    
@RequestMapping(value = "/user/{id}", method = RequestMethod.POST)    
public  @ResponseBody String updateUserProfile( @PathVariable("id") long userId,  @RequestBody User user  )   {        
    //
    // Code processing the input parameters
    //    
    String response = "{\"message\":\"Post With ngResource - id: " + String.valueOf( userId ) + ",firstname: " + user.getFirstname() + ", lastname: " + user.getLastname() + ", address: " + user.getAddress() + ", email: " + user.getEmail() +"\"}";
    return response;
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
关于ssm框架使用mysql控制台出现警告问题
使用MySQL时,总会时不时出现这种警告信息 警告信息:WARN: Establishing SSL connection without server's identity verification is not recommended.   出现这个警告的原因是: MySQL在高版本需要指明是否进行SSL连接。
959 0
SpringBoot2.0 基础案例(10):整合Mybatis框架,集成分页助手插件
一、Mybatis框架 1、mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
1423 0
PHPpraffa也有了,一个PHP版本的阿里云函数计算与API网关的开发框架
发布了Python版本的函数计算与API网关的开发框架后,一直觉得对不起PHP,因为公司一直是用PHP的,我这弄了个Python,实在不该,对了,(Python版本说明点这里。 PHPpraffa是什么? PHPpraffa 是praffa的PHP版本。
1160 0
SSM框架——使用 MyBatis Generator 生成代码,包括:Model、Dao、Mapping
基于 SSM 框架开发,Mybatis 属于半自动 ORM,如果每个数据表相关的 Model、Dao、Mapping 都要自己动手去写,是不是很麻烦呢?工作量最大的就是书写Mapping的映射文件,而且手动书写很容易出错。
1153 0
SpringBoot实战(十)之使用Spring Boot Actuator构建RESTful Web服务
一、导入依赖 4.0.0 org.springframework gs-actuator-service 0.1.0 org.springframework.
1535 0
JSP 用户提交请求
当用户第一次请求一个jsp页面时,首先被执行的方法是构造方法 就是转换为class文件后,他会创建一个Servlet的实例,然后调用Servlet的构造方法,再调用jspInit()方法 ​(1)JSP引擎先把该JSP文件转换成一个Java源文件(Servlet),在转换时如果发现JSP文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息。
624 0
+关注
3598
文章
840
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载