java - 将 java web 服务 json 消费到 Angular 4 中

标签 java angular web-services

我用 Jersey 和 Javax.ws.rs 创建了一个 java webservice,并在我的 Controller 上创建了一个返回 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 运行项目并访问/rest/chamados/时的输出是这样的 >

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

我的问题是,当我尝试在我的 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).

关于出了什么问题或者我应该如何做的任何提示?

提前致谢

最佳答案

一种可能的解决方案:

看看这个文档: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 服务器端口。

关于java - 将 java web 服务 json 消费到 Angular 4 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46615019/

相关文章:

angular - 输入超慢的 ionic 页面

java - IWAB0014E 创建 Web 服务时发生意外异常

Java - 区分ZIP文件和CSV文件

java - 错误 'Can' 无法解析 MainActivity 中的符号 'container'

javascript - 模板解析错误 Angular 8

php - 如何从 C++ 调用 php-cgi

java - 没有为数组类型定义反序列化器

java - 如何防止 Hibernate 使用 0 作为 ID?

java - 如何在 JVM 中设置默认区域设置?

javascript - 无法读取未定义的 Angular 5 的属性 'toLowerCase'