将java webservice json合并为Angular4

将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

我用Jersey和Javax.ws.rs创建了一个JavaWebService,在我的控制器上创建了一个返回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;
    }
}
我的问题是当我在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();