RestEasy-JSON响应-来自Angular2客户端,如何仅获取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

我是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/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()返回this.http.get(this.baseURL+'hello/world').toPromise()