将java webservice json考虑到Angular4中

时间:2017-10-06 23:00:28

标签: java angular web-services

我使用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).

关于什么是错误的提示或我应该怎么做?

提前致谢

5 个答案:

答案 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”扩展程序。 PHPMyAdmin Showing Tests

尝试帮助。

此扩展程序会导致它欺骗您的Web服务,而不是作为来自localhost的请求读取请求。

答案 2 :(得分:0)

最简单的方法:

你也可以使用JsonP,你需要将JSON包装在一个函数中,然后在Angular中使用Jsonp工具。

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

答案 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();

不确定这是否安全......任何人都知道吗?