如何设置angular2应用程序以访问本地rest服务?

如何设置angular2应用程序以访问本地rest服务?,angular,spring-boot,jax-rs,Angular,Spring Boot,Jax Rs,我有一个angular2应用程序,我想连接到用spring boot构建的本地rest服务。我希望能够在自己的端口上运行rest服务,然后在不同的端口上运行angular2应用程序,但能够对rest服务进行http调用。我使用postman来测试rest服务,rest服务似乎按照预期运行 如何设置angular2应用程序,使其能够对本地rest服务进行http调用 当我在angular2应用程序中使用此代码时,我会得到一个对我来说毫无意义的错误。这是代码 应用内组件 var data={data

我有一个angular2应用程序,我想连接到用spring boot构建的本地rest服务。我希望能够在自己的端口上运行rest服务,然后在不同的端口上运行angular2应用程序,但能够对rest服务进行http调用。我使用postman来测试rest服务,rest服务似乎按照预期运行

如何设置angular2应用程序,使其能够对本地rest服务进行http调用

当我在angular2应用程序中使用此代码时,我会得到一个对我来说毫无意义的错误。这是代码

应用内组件

var data={data:"hi from angular2"};
var api="apikey";
this.ghttp.sendJson(data,api)
  .subscribe((res)=>{
    console.log(JSON.stringify(res));
  });
在Http服务中

  sendJson(jsonData, apiKey){
    var localhost= "http://127.0.0.1:8080/";
    var mail = "email";
    const headers = new Headers();
    var body = JSON.stringify(jsonData);
    var url = localhost+mail;
    console.log(url);
    headers.append("api-key",apiKey);
    headers.append("Content-Type", "application/json");

    return this.http
      .post(url, body, {headers:headers} )
      .map((res:Response)=> res.json() );

  }
这是我得到的错误:

[错误]异常:./AppComponent类AppComponent\u主机中的错误- 内联模板:0:0原因:响应,状态:500内部 URL的服务器错误:null g(脚本元素1:68:175)handleError (main.bundle.js:61731)(匿名函数)(main.bundle.js:28298) onInvoke(main.bundle.js:30637)运行(main.bundle.js:115785) (匿名函数)(main.bundle.js:116173)invokeTask (main.bundle.js:115936)onInvokeTask(main.bundle.js:30628) invokeTask(main.bundle.js:115935)runTask(main.bundle.js:115825) drainMicroTaskQueue(main.bundle.js:116072)promiseReactionJob

错误消息中也有这一行

无法分析url“”;原始错误: undefined不是对象(正在计算'collectionName.split')”

如前所述,我可以使用postman为地址“”创建一个请求,它可以正常工作,但angular2应用程序在向该地址发出请求时抛出上述错误


关于如何使这项工作有效,有什么想法吗?

经过一些研究后,我意识到有几个问题影响了这项工作。第一个是InMemoryWebApi。当我遵循文档并在app.module.ts
InMemoryWebApiModule.forRoot(InMemoryDataService,{passThruUnknownUrl:true})
中添加这一行时,这似乎阻止了对本地rest服务的访问,但却允许我的应用程序像应该的那样访问google maps api。 一旦我弄明白了这一点,我就遇到了另一个与跨域请求相关的错误。我发现这个链接非常有用,可以将我的jaxrs服务配置为能够接受来自angular2应用程序的请求。您可以添加一个函数,我的JAX资源类之一实现ContainerResponseFilter,然后我有一个这样的方法

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext cres) throws IOException {
    cres.getHeaders().add("Access-Control-Allow-Origin", "http://localhost:4200");
    cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization, api-key, employeeId");
    cres.getHeaders().add("Access-Control-Allow-Credentials", "true");
    cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    cres.getHeaders().add("Access-Control-Max-Age", "1209600");
    cres.getHeaders().add("Access-Control-Max-Age", "1209600");
}

服务器日志文件是什么样子的?感谢您的响应…这是一个springboot项目,我还没有将其配置为登录到文件,因此它只是登录到IDE的控制台,IDE中的控制台没有任何记录。唯一记录到浏览器控制台的是上述消息。