本文讲述如何使用angular2的http服务来去一台由SpringMVC发布的rest服务的服务器上拉取数据。

我们现来上服务端代码,

 @ResponseBody
    @RequestMapping("/hero")
    public Object getData(HttpServletResponse response) {

        //服务器端跨域的配置
        response.setHeader("Access-Control-Allow-Origin","*");
        logger.warn("得到调用.....");
        System.out.println(new Hero().getName() );
        Hero hero = new Hero();
        hero.setName("张三李强");
        return  hero;
    }

response.setHeader("Access-Controller-Allow-Origin","*");这行代码是为了允许跨域,所谓的跨域这里笔者简单的讲一下,就是访问不同域的时候,是否允许跨域的一个问题。


javascript请求的网络地址只要协议、域名、端口有任何一个不同,都被当作是不同的域。

打一个比方 http://www.test.com/ 和

http://www.test.com:8080就是不同的域


服务器端的rest服务就讲到这里。

现在来讲客户端的实现。

angular2采用的编程语言是typescript。

类似于其他的MVVM框架。angular2同样的进行了组件化。

这里笔者写了三个文件

student.component.ts //组件文件

student,service.ts //服务文件

student.ts //实体文件

组件代码调用服务代码,服务的代码发起http请求从rest服务器上拉取数据



这里笔者直接上代码了,代码的注释都已经很详细了。足以说明问题

student.component.ts

import {Component,OnInit} from "@angular/core";
import {StudentService} from "./student.service";
import {Student} from "./student";
@Component({
  moduleId: module.id,selector: 'student',template: `{{title}}`,providers: [StudentService],})
//实现了OnInit接口以便于加载完组件就进行从服务器端抓取数据
export class StudentComponent implements OnInit {
  title = '这是学生组件用于演示ng2从springmvc服务器端拉取数据';
  students: Student[];
  //注入StudentService服务
  constructor(private studentService: StudentService) {
  }
  //组件被加载立即去rest服务器上拉取数据
  ngOnInit(): void {
    this.getStudent();
  }

  getStudent() {
    this.studentService.getStudent().then(students => console.log(),error => console.log(error));
  }


}


student,service.ts

import {Injectable} from "@angular/core";
import {Http,Response} from "@angular/http";
import {Student} from "./student";

@Injectable()
export class StudentService {
  //从指定的地址拉取数据
  private url = 'http://localhost:8080/hero';

  constructor(private http: Http) {
  }

  getStudent(): Promise<Student[]> {
    return this.http.get(this.url).toPromise()
      .then(this.extractData)
      .catch(this.handleError);
  }
  private extractData(res: Response) {
    let body = res.json();
    //将拿到的hero数据进行打印....
    console.log("即将开始对Student数据的打印-----");
    console.log(body['name']);
    console.log("结束对Student数据的打印-----");

    return body;
  }
  private handleError (error: Response | any) {
    console.log("有错误???");
    // In a real world app,we might use a remote logging infrastructure
    let errMsg: string;
    if (error instanceof Response) {
      const body = error.json() || '';
      const err = body.error || JSON.stringify(body);
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
    } else {
      errMsg = error.message ? error.message : error.toString();
    }
    console.error(errMsg);
    return Promise.reject(errMsg);
  }
}


student.ts

//自己封装的实体
export class Student {
  constructor(public id: number,public name: string) {
  }
}

完整的代码地址是: http://download.csdn.net/detail/u013803262/9752256


代码在myNg2_http_demo这个分支上,代码在app/student文件夹下。


至于服务器端只需要在springMVC的controller类中加入一个被@RequestMapping注解修改的方法即可,直接返回pojo对象就可以了。

angular2下用http到由SpringMVC发布rest服务的服务器端拉取数据的更多相关文章

  1. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  2. 有没有办法知道购买哪个iTunes帐户? – iOS

    我的应用程序提供应用内购买非消耗类型.该应用程序具有登录功能.是否可以根据登录用户购买我的应用程序?

  3. ios – 使用NSURLSession获取JSON数据

    我试图从谷歌距离api使用NSURLSession获取数据,但如下所示,当我打印响应和数据时,我得到的结果为NULL.可能是什么问题?

  4. 保护MY REST API仅用于MY IOS APP

    我在Laravel中设计一个RESTAPI,用于我的ios应用程序.目前我被困在以下几点:如何保护我的RESTAPI只允许访问我的ios应用程序?听起来我需要通过向我的IOSAPP授予一个私钥来将类似于HMAC方法的内容合并到我的IOSAPP代码中.当从iosapp中运行请求时,我传递带有私钥和其他数据的哈希,然后当在服务器上收到请求时,我通过重新计算哈希来检测请求是否来自应用程序内的用户.我不知道这是否安全&我会认为不是吗?

  5. ios – 错误域= com.alamofire.error.serialization.response代码= -1011“请求失败:禁止

    任何人都可以帮我解决以下错误–>在AFNetworking2.5中使用“删除”方法时出错解决方法我发现,如果我的手机时钟不同步……它不允许我更新…也许检查你的手机设置到正确的时间“自动区”,看看是否有效…

  6. ios – Apple应用程序内购买收据 – 在服务器端验证

    我想验证它,并确保这是独一无二的.我担心的是:如果有人会收到一张有效收据,他就可以破解我们的服务器端API,并使用相同的有效收据进行无限数量的应用内购买.我应该以某种方式解密并检查transaction_id的“原始”收据,即我发送给Apple进行验证的收据?

  7. iOS网页/原生应用Facebook登录弹出 – 失败?

    如果我重新启动app/web-app,用户将自动登录,并重定向到成功页面.我认为是导致问题的原因当您在Firefox/Chrome/Safari浏览器中运行网页时,Facebook登录对话框会弹出一个弹出窗口或另一个选项卡.我相信这是这个弹出页面的一个问题,以及当成功登录时Javascript如何与自身通信.window.close的东西没有返回的根页面…失败的解决方法由于应用程序挂在前面提到的URL上,我决定在shouldStartLoadWithRequest(…)中添加if语句以强制UIWebvie

  8. ios – Watchkit新会话不起作用

    我的手表扩展中有两个视图控制器.每当我打电话时我只得到第一个视图控制器的响应,并在第二个viewcontroller中得到错误WCSession在app和watch扩展中启动.任何建议?

  9. 使用Firebase iOS Swift将特定设备的通知推送到特定设备

    我非常感谢PushNotifications的帮助.我的应用聊天,用户可以直接向对方发送短信.但是如果没有PushNotifications,它就没有多大意义.它全部设置在Firebase上.如何将推送通知从特定设备发送到特定设备?

  10. ios – 保存从查询中获取的用户的属性(即不在currentUser上)

    我有兴趣根据currentUser执行的操作将属性保存到数据库中的用户.基于以下代码,我收到错误消息“除非已通过logIn或signUp验证用户,否则无法保存用户”我想知道是否有一个解决方法,我可以将属性保存到foundUser,而无需登录该用户.谢谢你的帮助!解决方法如果要更新当前不是登录用户的用户,则需要使用主密钥调用Parse.您可以从CloudCode执行此操作;并从您的iOS项目中调用它;

随机推荐

  1. Ajax+SpringMVC requestBody

    ajax+SpringMVC经验证,上文写的是比较正确的,所以转过来保存一下.传JSON对象前端后端传JSON字符串+@RequestBody接收前端后端

  2. H5FormData+AJAX+SpringMVC跨域异步上传文件

    最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩。总结下今天弄了一个早上的跨域异步上传文件。主要用到技术有HTML5的FormData,AJAX,SpringMVC。注意这个upload.js是自己写的,里面那个ajaxFileUpload并不是jQuery提供的那个上传插件的方法。服务端接口写法:@ResponseBody@RequestMappingpublicvoidaddPicthrowsIOException{System.out.println;response.getWrite

  3. Ajax异步提交List对象,SpringMvc如何接收?

    Springmvc的一个问题一直被广大开发者所诟病,就是在list对象的转换上一直并不是特别好用,网上很多解决方法关于不同的表单提交方式这里就不多说了,只介绍下ajax方式提交list对象的方法。比如你要通过ajax传递下面一段数据到controller:如果像下面这样写肯定是无法传递到后端的:这样肯定会报错User找不到之类的,那么怎么解决呢?

  4. ajax json异步springmvc http请求返回状态码为406的解决

    是因为缺少json相关jar包,网上很多人只是给出了前两个jar,其实不全,依旧406,应该给出四个

  5. AJAX和SpringMVC交互

    AJAX利用jquerySPRING

  6. ajax与springmvc传参方式总结

    若传递的是数组对象,需要用第二种方式,否则失败。①前台$.ajax;后台:@RequestMapping@ResponseBodypublicStringdel{return"";}如果不加Traditional,通过观察浏览器中发送的请求,可以发现参数如下:newArray[]:delArray[]:可以看到,参数的名字为newArray[]而不是我们所定义的newArray,也就是说,当传递数组时,会在我们的数组名称后自动加上”[]”,所以后台接不到。

  7. ajax传递json参数到springmvc

    前后端交互,经常出现400或者415,这里写个小笔记,已做参考,不断完善方式一:前台代码:后台代码:

  8. $.ajax与SpringMVC的那点事-传参与返回

    由于有@RresponseBody标示,SpringMVC会将头信息中的Content-Type:application/x-www-form-urlencoded(默认值)改为application/json;,即返回为JSON格式,所以ajax的dataType:"json"可有可无。

  9. AJAX+JQuery+SpringMVC实现图片上传

    利用ajax实现前端与后台的交互,从服务端获取数据,并调回到前端进行解析。下面是前端代码:下面上后端的代码:Controller层Service层:DAO层:以上都是获取数据的部分,下面是提交数据的代码:Controller:Service:这个是文件上传的关键部分以上

  10. AJAX+SpringMVC 获取后台数据的方式

    利用ajax同步获取服务器的数据,当页面加载完成的时候后台代码:Service层:List转json方法:学习中。。。。。。

返回
顶部