我使用Jersey和Javax.ws.rs制作了一个java webservice,并在我的控制器上创建了一个返回json对象列表的方法。这是方法>
@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和access / rest / chamados /运行项目时的输出是&gt;
[{"id":50,"assunto":"assunto1","mensagem":"oi","status":"NOVO"},
{"id":20,"assunto":"assunto2","mensagem":"oi2","status":"FECHADO"}]
我的问题是,当我尝试在我的angular4项目中打印它时,我从来没有这样做过,所以我有点失落,这是如何尝试打印它&gt;
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&gt;
时遇到的错误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).
关于什么是错误的提示或我应该怎么做?
提前致谢
答案 0 :(得分: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;
}
}
将端口号(我的示例中为9000端口)更改为您在Nodejs服务器中使用的端口,或者为您的网页提供的Web服务器端口。
答案 1 :(得分:0)
使用Google Chrome尝试安装此“Allow-Control-Allow-Origin”扩展程序。
尝试帮助。
此扩展程序会导致它欺骗您的Web服务,而不是作为来自localhost的请求读取请求。
答案 2 :(得分:0)
答案 3 :(得分:0)
我遇到的同样问题。我已将@CrossOrigin(origins = "http://localhost:4200")
更改为@CrossOrigin
,然后将其更改为
答案 4 :(得分:0)
感谢那些受欢迎的人,我能够通过将其添加到getMethod&gt;&gt;
的末尾来实现。 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();
不确定这是否安全......任何人都知道吗?