2017-10-06 58 views
0

我用Jersey和Javax.ws.rs做了一個java webservice,在我的控制器中創建了一個返回json對象列表的方法。這是該法>Cosuming java webservice json into 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; 
    } 
} 

的輸出,當我運行Apache和接入/ REST/chamados項目/是這個>

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

我的問題是,當我試圖在我的angular4打印出來項目中,我從來沒有這樣的IM有點失去了做到了這一點,這怎麼IM 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>

0123時,我得到的錯誤
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

添加註釋@CrossOrigin到Java方法是這樣的:

@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; 
    } 
} 

更改端口數字(在我的例子中是9000端口)到您在Nodejs服務器上使用的端口或者您曾經使用的Web服務器端口有爲您的網頁提供服務。

+0

感謝您的鏈接似乎不錯,生病嘗試使用Spring使從scracth一個新的項目,我不能只是@CrossOrigin我控制器上,它給了我,我嘗試添加 com.airhacks錯誤「無法找到符號」 jaxrs-cors 0.0。2 但它沒有工作 –

0

使用谷歌瀏覽器嘗試安裝此「允許控制允許來源」擴展名。 enter link description here

嘗試也許可以幫忙。

該擴展會導致它欺騙您的web服務,而不是從本地主機讀取請求作爲請求。

0

同樣的問題,我曾面對。我改變@CrossOrigin(origins = "http://localhost:4200")@CrossOrigin那麼它的工作

+0

CrossOrigin不被識別在我的代碼中,可能differente jax-rs版本?礦是這個>的javax JavaEE的幅材-API 7.0 提供

0

感謝awnsers傢伙,我能加入這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(); 

不知道這是否是安全的壽做到這一點。 ...誰知道?