2017-10-06 10 views
0

JerseyとJavax.ws.rsでJava Webサービスを作成し、私のコントローラでjsonオブジェクトのリストを返すメソッドを作成しました。これは私がApacheとアクセス/休憩/ chamados /本である>Java Webservice jsonをAngular4にCosuming

[{"id":50,"assunto":"assunto1","mensagem":"oi","status":"NOVO"}, 
{"id":20,"assunto":"assunto2","mensagem":"oi2","status":"FECHADO"}] 

でプロジェクトを実行するとき、私は私のangular4でそれを印刷しようとすると、私の問題がある方法>

@Path("chamados") 
public class ChamadoController { 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("/") 
    public List<Chamado> listChamados(){ 
     Chamado c1 = new Chamado(); 
     c1.setId(50); 
     c1.setAssunto("assunto1"); 
     c1.setMensagem("oi"); 
     c1.setStatus(Status.NOVO); 

     Chamado c2 = new Chamado(); 
     c2.setId(20); 
     c2.setAssunto("assunto2"); 
     c2.setMensagem("oi2"); 
     c2.setStatus(Status.FECHADO); 

     List<Chamado> list1 = new ArrayList<Chamado>(); 
     list1.add(c1); 
     list1.add(c2); 

     return list1; 
    } 
} 

出力されますプロジェクトなので、イムはちょっと失わ前に私は、それを印刷するtryngこの方法イムこれをやったことがない>

export class AppComponent{ 
    data: any = {}; 
    constructor(private http: Http){ 
     this.getData(); 
     this.getImages(); 
    } 


    getData(){ 
     return this.http.get(this.apiURI).map((res: Response) => res.json()) 
    } 

    getImages(){ 
     this.getData().subscribe(data => { 
     console.log(data); 
    }) 
    } 

    private apiURI = 'http://localhost:8080/aprendendo-java-backend/rest/chamados/';    
} 

これはCONSOLE.LOGしようとしたとき、私は取得エラーです>

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8080/aprendendo-java-backend/rest/chamados/. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). 

何が問題なのか、どうすればいいですか?事前に

おかげ

答えて

1

一つの可能​​な解決策:Enabling Cross Origin Requests for a RESTful Web Service

は、このようなあなたのJavaメソッドに注釈@CrossOriginを追加します:

@Path("chamados") 
@CrossOrigin(origins = "http://localhost:9000") 
public class ChamadoController { 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("/") 
    public List<Chamado> listChamados(){ 
     Chamado c1 = new Chamado(); 
     c1.setId(50); 
     c1.setAssunto("assunto1"); 
     c1.setMensagem("oi"); 
     c1.setStatus(Status.NOVO); 

     Chamado c2 = new Chamado(); 
     c2.setId(20); 
     c2.setAssunto("assunto2"); 
     c2.setMensagem("oi2"); 
     c2.setStatus(Status.FECHADO); 

     List<Chamado> list1 = new ArrayList<Chamado>(); 
     list1.add(c1); 
     list1.add(c2); 

     return list1; 
    } 
} 

変更ポートこのドキュメントで

外観number(私の例では9000ポート)を、あなたのNodejsサーバで使用しているポートや、それまでのWebサーバのポートあなたのウェブページを提供している。

+0

そのリンクのおかげで春を使用してscracthから新しいプロジェクトを作る良い、悪い試しているようだ、私はちょうど私のコントローラ上@CrossOriginカント、それはエラーが「シンボルを見つけることができない」私を与える、私は com.airhacksを追加してみました jaxrs-cors 0.0。2 しかし、うまくいきませんでした –

0

Google Chromeを使用して、この「Allow-Control-Allow-Origin」拡張機能をインストールしてみてください。 enter link description here

多分助けてください。

この拡張により、ローカルホストからのリクエストとしてリクエストを読み取らずに、Webサービスを騙してしまいます。

0

最も簡単な方法:

あなたもJSONPを使用することができ、あなたは、関数でJSONをラップして、角度でJSONP機能を使用する必要があります。

https://angular.io/api/http/Jsonp

0

同じ問題私が直面していました。私は@CrossOriginにawnsersみんなのために、その作業

+0

CrossOriginは私のコードでは認識されません、多分differente jax-rs version?鉱山は を提供 7.0 この1>のjavax JavaEEのウェブ-APIであります –

0

感謝を@CrossOrigin(origins = "http://localhost:4200")を変更して、私はgetMethodの終わり>>

 return Response 
     .status(200) 
     .header("Access-Control-Allow-Origin", "*") 
     .header("Access-Control-Allow-Headers", "origin, content-type, accept, authorization") 
     .header("Access-Control-Allow-Credentials", "true") 
     .header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD") 
     .header("Access-Control-Max-Age", "1209600") 
     .entity(list1) 
     .build(); 

これは安全なカントーの場合はわからないにこれを追加することによってそれを行うことができました。誰か知ってる?

関連する問題