客户响应Application.Json

时间:2017-09-26 13:58:20

标签: java json client

我正在尝试为某些Rest应用程序创建一个客户端。我在Chrome中使用高级REST客户端测试了Rest应用程序。

我收到了:

 {
  "authorization": false,
  "provider": "Provider"
 }

那太好了。 但是我希望在我的客户中获得这个:

    public class MainApp extends Application {
    public static final String BASE_URI = "http://localhost:8000/test";
    public static final String PATH_NAME= "/sytem/Consumer/r/Provider";

@Override
public void start(Stage stage) throws Exception {
}

public static void main(String[] args) {

   Client client = ClientBuilder.newClient();
    WebTarget target = client.target(BASE_URI).path(PATH_NAME);
    Response response = target.request(MediaType.APPLICATION_JSON).get();
    System.out.println(response);
    client.close();

}

}

我只在终端收到这个:

λ java -jar Client_consumer-1.0-SNAPSHOT.jar
org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine$1@6591f517

课程是:

@XmlRootElement
public class Auth_response implements Serializable {
private String Provider;
private boolean authorization;

public Auth_response() {
     super();
}

public Auth_response(String Provider, boolean authorization) {
    super();
    this.Provider = Provider;
    this.authorization = authorization;
}

public String getProvider() {
    return Provider;
}

public boolean isAuthorization() {
    return authorization;
}

public void setProvider(String Provider) {
    this.Provider = Provider;
}

public void setAuthorization(boolean authorization) {
    this.authorization = authorization;
}

@Override
public String toString() {
    return "Auth_response{" + "Provider=" + Provider + ", authorization=" + authorization + '}';
}

}

我想知道如何正确打印响应,以及如何再次转换为java对象。我尝试了一些例子,但没有任何作用,我认为我需要一些指导。

编辑: 我尝试了这个来获取对象:

 Auth_response r=
 client.target("http://localhost:8000/test/system/Consumer/r/Provider")
.request(MediaType.APPLICATION_JSON_TYPE).
get(Auth_response.class);
     System.out.println("funciona:");
     System.out.println(r.getProvider());
     System.out.println(r.isAuthorization());

但是我得到了下一个错误:

Caused by: javax.ws.rs.ProcessingException: RESTEASY003145: Unable to find a MessageBodyReader of content-type application/json and type class ah.client_consumer.Auth_response
    at org.jboss.resteasy.core.interception.ClientReaderInterceptorContext.throwReaderNotFound(ClientReaderInterceptorContext.java:42)
    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.getReader(AbstractReaderInterceptorContext.java:75)
    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:52)
    at org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59)
    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:55)
    at org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:251)
    at org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readEntity(ClientResponse.java:181)
    at org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:213)
    at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:105)
    ... 14 more

异常运行应用程序ah.client_consumer.MainApp

2 个答案:

答案 0 :(得分:0)

尝试更改以下行:

Response response = target.request(MediaType.APPLICATION_JSON).get();
System.out.println(response);

Response response = target.request(MediaType.APPLICATION_JSON).get(String.class);
System.out.println(response.toString());

因为您没有指定您接受的响应类型,所以您将获得对象作为响应。

答案 1 :(得分:0)

解决方案:

添加到代码:

ResteasyProviderFactory instance=ResteasyProviderFactory.getInstance();
RegisterBuiltin.register(instance);
instance.registerProvider(ResteasyJacksonProvider.class);

解决方案是:Unable to find a MessageBodyReader of content-type application/json and type class java.lang.String