MIME媒体类型的文本/ html; charset =未找到UTF-8

时间:2016-08-12 12:31:54

标签: java android ssl jersey

我试图通过https(SSL)获得一个swagger-codgen生成的jersey API库。

只有像这样的http才能正常工作:

  public ApiClient rebuildHttpClient() {
    // Add the JSON serialization support to Jersey
    JacksonJsonProvider jsonProvider = new JacksonJsonProvider(objectMapper);
    DefaultClientConfig conf = new DefaultClientConfig();
    conf.getSingletons().add(jsonProvider);
    Client client = Client.create(conf);
    if (debugging) {
      client.addFilter(new LoggingFilter());
    }
    this.httpClient = client;
    return this;
  }

但后来我尝试像这样设置SSL

public ApiClient rebuildHttpClient() {
    // Add the JSON serialization support to Jersey
    JacksonJsonProvider jsonProvider = new JacksonJsonProvider(objectMapper);

    TrustManager[] byPassTrustManagers = new TrustManager[] { new X509TrustManager() {

      public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
      }

      public void checkClientTrusted(X509Certificate[] chain, String authType) {  }

      public void checkServerTrusted(X509Certificate[] chain, String authType) {   }

    } };


    HostnameVerifier hostnameVerifier = HttpsURLConnection.getDefaultHostnameVerifier();

    ClientConfig config = new DefaultClientConfig();

    SSLContext ctx = null;
    try {
      ctx = SSLContext.getInstance("SSL");
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }
    try {
      ctx.init(null, byPassTrustManagers, null);
    } catch (KeyManagementException e) {
      e.printStackTrace();
    }
    config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(hostnameVerifier, ctx));
    config.getSingletons().add(jsonProvider);

    Client client = Client.create(config);

    if (debugging) {
      client.addFilter(new LoggingFilter());
    }
    this.httpClient = client;
    return this;
  }

它构建正常,但执行时,我收到此错误

  

Java类java.lang.String的消息体阅读器,Java类型类java.lang.String和MIME媒体类型text / html; charset =未找到UTF-8   08-12 13:43:41.230 12544-12861 / com.xxxxxx.app.xxxxx E / ClientResponse:与MIME媒体类型兼容的已注册邮件正文阅读器是:                                                                             / - >                                                                              com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider

在我的ApiClient中执行此方法(尝试进行身份验证)

 private void updateParamsForAuth(String[] authNames, List<Pair> queryParams, Map<String, String> headerParams) {
    for (String authName : authNames) {
      Authentication auth = authentications.get(authName);
    if (auth == null) throw new RuntimeException("Authentication undefined: " + authName);
    auth.applyToParams(queryParams, headerParams);
    }
}

当我使用swagger-ui测试服务器响应时,它显示它的类型正确 application / json

它与服务器端有什么关系吗?那几天工作得很好,然后突然出现错误,我改变了代码客户端。

2 个答案:

答案 0 :(得分:0)

代码中的部分内容并未显示实际完成的内容,但查看我猜的错误消息,即客户端已尝试调用服务器并获得html响应。您的客户不知道如何解码此响应。我建议你在浏览器中调用URL,看看会发生什么。 您可能正在调用错误的网址,或者您可能需要在通话中提供身份验证凭据。

答案 1 :(得分:0)

这是服务器端的问题。当服务器出现问题时,它会发生接缝,我不是后端开发人员所以我无法告诉它是什么问题。