RestEasy-JSON响应-来自Angular2客户端,如何仅获取JSON对象
我是REST服务新手,我有一个Angular2客户端调用RestEasy JAX-RS服务。我想得到的只是JSON格式的“Hello World”消息。我只需要一个JSON对象,但得到的响应结构如下:RestEasy-JSON响应-来自Angular2客户端,如何仅获取JSON对象,json,angular,jax-rs,resteasy,Json,Angular,Jax Rs,Resteasy,我是REST服务新手,我有一个Angular2客户端调用RestEasy JAX-RS服务。我想得到的只是JSON格式的“Hello World”消息。我只需要一个JSON对象,但得到的响应结构如下: _body: "{"message":"Hello World!!"}" headers: t ok: true status: 200 statusText: "OK" type: 2 url: "http://localhost:8080/helloapp/rest/hello/w
_body: "{"message":"Hello World!!"}"
headers: t
ok: true
status: 200
statusText: "OK"
type: 2
url: "http://localhost:8080/helloapp/rest/hello/world"
__proto__: ...
我的问题是,应该是这样吗
我的意思是,我想我可以直接从响应中访问JSON对象。差不多
this.service.getHello()
.then( result => {
console.log(JSON.parse(result)); //{message: "Hello World"}
this.message = JSON.parse(result).message;
});
但实际上我必须从你的身体里得到它:
这是一个容易配置的东西,有没有办法改变它
或
我是否应该考虑在我的数据中总是有一个字段,这是默认的响应结构? 出于最终考虑,以下是我的后端代码:
HelloWorld服务:@Path("/hello")
@Produces({ "application/json" })
@Consumes({ "application/json" })
public class HelloWorld {
public HelloWorld() {}
@GET
@Path("/world")
public Message getHello(){
return new Message("Hello World!!");
}
}
我的RestEasy版本是3.1.1.Final,在Wildfly 10.1.0中运行。Final返回的是来自
Http
请求的对象。这是所有Http
操作将返回的内容。从中解析JSON最简单的方法就是调用其上的JSON()
方法
this.service.getHello()
.then((res: Response) => {
let obj = res.json();
});
如果希望getHello
只返回对象而不必解析它(在调用的客户端上),那么可以在getHello
方法中通过映射它(使用Observable.map
操作)来实现
您得到的是来自
Http
请求的对象。这是所有Http
操作将返回的内容。从中解析JSON最简单的方法就是调用其上的JSON()
方法
this.service.getHello()
.then((res: Response) => {
let obj = res.json();
});
如果希望getHello
只返回对象而不必解析它(在调用的客户端上),那么可以在getHello
方法中通过映射它(使用Observable.map
操作)来实现
正如peeskillet在上面所说的,您从请求中得到的是整个响应,虽然有时您可能需要检查报头,可能是为了处理不同的返回条件(例如,在4xx或5xx响应上重试或重定向),但大多数情况下,我们假设请求成功,我们只需要有效负载 Angular2鼓励使用可观测数据,因此您的服务可能看起来像这样:
getHello()
{
return this.http.get(http://localhost:8080/helloapp/rest/hello/world)
}
data: string;
ngOnInit() {
this.service
.getHello()
.map(response => response.json())
.subscribe (
data => {
this.data = data,
},
err => console.log('Error',err),
() => console.log('data',this.data)
);
}
您的组件可能看起来像这样:
getHello()
{
return this.http.get(http://localhost:8080/helloapp/rest/hello/world)
}
data: string;
ngOnInit() {
this.service
.getHello()
.map(response => response.json())
.subscribe (
data => {
this.data = data,
},
err => console.log('Error',err),
() => console.log('data',this.data)
);
}
您调用服务,它是一个http.get()并返回一个可观察对象,我们使用.map将响应解析为JSON,JSON还返回一个可观察对象,我们订阅了它
Subscribe有三个回调函数,
.订阅(成功,失败,完成)
在上面关于成功的示例中,我们将有效负载-data-分配给this.data,如果订阅失败,您将记录错误,当它完成时,我们可以做任何我们喜欢的事情,但在这种情况下,我们将此.data记录到控制台-这是可选的,但是我会在开发过程中注销结果,然后在以后将其删除。正如peeskillet上面所说的,您将从请求中返回整个响应,有时您可能需要检查头,也许是为了处理不同的返回条件(例如,重试或重定向4xx或5xx响应),大多数情况下,我们假设一个成功的请求,我们只需要有效负载 Angular2鼓励使用可观测数据,因此您的服务可能看起来像这样:
getHello()
{
return this.http.get(http://localhost:8080/helloapp/rest/hello/world)
}
data: string;
ngOnInit() {
this.service
.getHello()
.map(response => response.json())
.subscribe (
data => {
this.data = data,
},
err => console.log('Error',err),
() => console.log('data',this.data)
);
}
您的组件可能看起来像这样:
getHello()
{
return this.http.get(http://localhost:8080/helloapp/rest/hello/world)
}
data: string;
ngOnInit() {
this.service
.getHello()
.map(response => response.json())
.subscribe (
data => {
this.data = data,
},
err => console.log('Error',err),
() => console.log('data',this.data)
);
}
您调用服务,它是一个http.get()并返回一个可观察对象,我们使用.map将响应解析为JSON,JSON还返回一个可观察对象,我们订阅了它
Subscribe有三个回调函数,
.订阅(成功,失败,完成)
在上面关于成功的示例中,我们将有效负载-data-分配给this.data,如果订阅失败,您将记录错误,当它完成时,我们可以做任何我们喜欢的事情,但在这种情况下,我们将此.data记录到控制台-这是可选的,但是我在开发过程中注销了结果,然后将其删除。谢谢,我只是没有意识到,在使用Angular HTTPModule时,它实际上是在创建响应对象。我还在我的服务类“rxjs/Rx”中使用;库并将其转换为承诺而不是可观察的,如:
返回this.http.get(this.baseURL+'hello/world').toPromise()只是因为我就是这样学的。但是使用可见光是正确的方法吗?我不知道“正确”的方法。这可能只是一种偏好。但在转化为承诺之前,您肯定会使用可观察操作符(这就是您选择的)谢谢,我只是没有意识到,当我使用Angular HTTPModule时,它实际上是在创建响应对象。我还在我的服务类“rxjs/Rx”中使用;库并将其转换为承诺而不是可观察的,如:返回this.http.get(this.baseURL+'hello/world').toPromise()只是因为我就是这样学的。但是使用可见光是正确的方法吗?我不知道“正确”的方法。这可能只是一种偏好。但在变成承诺之前,您肯定会使用可观察运算符(这就是您选择的)