将java webservice json合并为Angular4
我用Jersey和Javax.ws.rs创建了一个JavaWebService,在我的控制器上创建了一个返回json对象列表的方法。这就是方法>将java webservice json合并为Angular4,java,angular,web-services,Java,Angular,Web Services,我用Jersey和Javax.ws.rs创建了一个JavaWebService,在我的控制器上创建了一个返回json对象列表的方法。这就是方法> @Path("chamados") public class ChamadoController { @GET @Produces(MediaType.APPLICATION_JSON) @Path("/") public List<Chamado> listChamados(){ Chama
@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;
}
}
我的问题是当我在angular4项目中尝试打印它时,我以前从未这样做过,所以我有点迷茫,这就是我如何尝试打印它>
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).
关于什么地方出了问题或者我应该怎么做,有什么建议吗
提前感谢一个可能的解决方案:
请参阅以下文档:
向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 port更改为您在Nodejs服务器中使用的任何端口,或您为网页提供服务的任何web服务器端口。使用Google Chrome尝试安装此Allow Control Allow Origin extension。 试试看,也许能帮上忙 此扩展导致它愚弄您的Web服务,而不是将请求作为本地主机的请求读取。最简单的方法: 您还可以使用JsonP,您需要将JSON封装在函数中,然后在函数中使用JsonP工具
我也面临同样的问题。我在CrossOriginorigins=http://localhost:4200 进入@CrossOrigin,然后它就开始工作了感谢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();
不确定这是否安全…有人知道吗?谢谢你的链接看起来不错,我会尝试使用Spring从scracth创建一个新项目,我不能在我的控制器上使用@CrossOrigin,它给了我找不到符号的错误,我尝试添加com.airhacks jaxrs cors 0.0.2,但它没有工作。我的代码中没有识别CrossOrigin,可能是不同的jax rs版本?我的是这个>提供的javaxjavaeewebapi 7.0
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();