我正在开始玩Angular2。我使用Jersey开发了一个基本的RESTful API。我测试了它,它工作正常(使用浏览器和SOAP UI)。这是代码:
@GET
@Produces(MediaType.APPLICATION_JSON)
public TwoWordsMessage getMessage() {
TwoWordsMessage message = new TwoWordsMessage();
message.setFirstWord("hello");
message.setSecondWord("world");
return message;
}
我尝试从Angular2应用程序调用该服务:
this.http.request(this.url).subscribe((res: Response) => {
this.message = res.json();
});
我可以看到(debbuging)调用“getMessage”方法并返回TwoWordsMessage对象,但Angular2应用程序永远不会得到它。与网址http://jsonplaceholder.typicode.com/posts/1相同的代码可以正常工作。
我做错了什么?
谢谢!
答案 0 :(得分:1)
您是在组件或服务中调用http请求吗?函数或方法是否触发了http请求?
另外,您能否看到回复中是否有错误? subscribe
方法可以将三个函数作为参数,第一个是成功,第二个是错误,第三个是完成。如果AJAX调用中存在错误(400s,500s等),则代码将永远无法处理它。试试这个:
this.http.request(this.url).subscribe((res: Response) => {
this.message = res.json();
}, (error) => {
console.warn(error)
});
看看吐出的是什么。要进一步调试,您甚至可以在Observable上使用.do()
方法:
this.http.request(this.url)
.do((res: Response) => console.log(res)) // or other stuff
.subscribe((res: Response) => {
this.message = res.json();
});
.do()
方法将使用响应执行任意函数,而不会实际影响它。
如果没有,您也可以尝试将http呼叫更改为http.get()
。我认为这不是问题,但Angular文档没有说明使用http.request()
默认哪种方法(虽然我几乎可以肯定它是GET)。
答案 1 :(得分:0)
我终于开始工作了。这是一个CORS问题。
控制台显示错误:
“请求时没有'Access-Control-Allow-Origin'标头 资源“
我改变了这样的资源方法:
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getMessage() {
TwoWordsMessage message = new TwoWordsMessage();
message.setFirstWord("hello");
message.setSecondWord("world");
return Response.status(200).header("Access-Control-Allow-Origin", "*").entity(message).build();
}
您可以在此处找到有用的信息:
http://www.codingpedia.org/ama/how-to-add-cors-support-on-the-server-side-in-java-with-jersey/