Angular-2 TypeError:无法读取属性' 0'未定义的(REST API)

时间:2016-10-22 08:28:30

标签: angular angular2-services

使用REST API。

Message.component.ts

export class Message {
  author: string;
  message: string;
  created:string;
 id:number;

}

这是(hero.service.ts)

import {Injectable} from '@angular/core';
import { Hero } from './hero';
import {Message} from './message';
import {Headers,Http,RequestOptions} from '@angular/http';
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/map';
import { Observable }  from 'rxjs/Observable';
@Injectable()
export class HeroService{
    private heroesUrl= 'app/heroes';
    private headers=new Headers({'Content-Type':'application/json'});
    constructor(private http:Http){}

     addMessage (json): Observable<Message> {
 // let body = JSON.stringify({ json });
  console.log(json);
    let resturl=   "http://localhost:8080/messenger/webapi/messages";
    //alert(resturl);
    let headers_rest = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers_rest });

    return this.http.post(resturl, json, options)
                    .map(res=>res.json())
                    .catch(this.handleError);
  }

    private extractData(res) {
  let body = res.json();
  return body.data || { };
}

===&gt;这是heroes.component.ts

obj={author:"",message:"",created:"2016-10-22T12:10:45.683",id:0};
   addMessage(){
  console.log(this.obj);
  this.heroService.addMessage(this.obj)
                   .subscribe(
                    (data)  =>{this.obj=data;
                       console.log("SUCCESS"+this.obj)},
                     error =>  this.errorMessage = <any>error
                     );}
}

[ Error Console Show When i click AddMessage button "Cannot read property '0' of undefined  "  ][1]

这是来自HTTP POST请求的接受正文消息的服务器端REST API。

package org.littlefish.minthurein.messenger.resources;
import java.util.List;
import javax.print.attribute.standard.Media;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.littlefish.minthurein.messenger.model.Message;
import org.littlefish.minthurein.messenger.service.MessageService;

@Path("/messages")
public class MessageResource {
    MessageService messageService=new MessageService();

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Message addMessage(Message message){
    System.out.println("Author"+message.getAuthor()+"Message"+message.getMessage());
    return  messageService.addMessage(message);
    }

模板heroes.component.ts

template: `
    <h2>My Heroes</h2>
    <ul class="heroes">
      <li *ngFor="let hero of heroes"
        [class.selected]="hero === selectedHero"
        (click)="onSelect(hero)">
        <span class="badge">{{hero.id}}</span> {{hero.name}}
         <button class="delete" (click)="delete(hero); $event.stopPropagation()">X</button>
      </li>
    </ul>
<div *ngIf="selectedHero">
  <h2>
    {{selectedHero.name | uppercase}} is my hero
  </h2>
  <button (click)="gotoDetail()">View Details</button>
</div>
<div>
  <label>Hero name:</label> <input #heroName />
  <button (click)="add(heroName.value)" heroName.value=''>
    Add
  </button>
</div>

*<div>
Author : <input type="text" [(ngModel)]="obj.author"  />
Message : <input type="text" [(ngModel)]="obj.message"  />
<button (click)="addMessage()">Add Message</button>
</div>*

错误控制台图像链接。

https://i.stack.imgur.com/onqbw.png

我尝试使用POSTMAN来确保服务器端请求中的REST API实际工作。它与POSTMAN一起使用。如何修复此错误?,请

0 个答案:

没有答案