Java Jboss RestEasy不';t使用UTF-8编码

Java Jboss RestEasy不';t使用UTF-8编码,java,utf-8,jboss,character-encoding,resteasy,Java,Utf 8,Jboss,Character Encoding,Resteasy,我正在Linux环境中使用Jboss EAP 6.2和RestEasy库(RestEasy jaxrs 2.2.1.GA) 每个客户端服务响应的主体不使用UTF-8编码。 下面是一个客户端的代码示例: ClientRequest request = new ClientRequest(properties.getProperty("sgprof.service.url")); request.accept("application/json;charset=UTF-8"); request.qu

我正在Linux环境中使用Jboss EAP 6.2和
RestEasy
库(
RestEasy jaxrs 2.2.1.GA
) 每个客户端服务响应的主体不使用UTF-8编码。 下面是一个客户端的代码示例:

ClientRequest request = new ClientRequest(properties.getProperty("sgprof.service.url"));
request.accept("application/json;charset=UTF-8");
request.queryParameter("key", "value");
ClientResponse<String> response = request.post(String.class);
String jsonResponse = response.getEntity();

您可以在服务声明中指定编码。。检查以下示例中的@products注释:

@GET
@Path("/customer/{customerUrn}")
@Produces(MediaType.APPLICATION_XML + ";charset=utf-8")
public Response getCustomerProducts(@PathParam("customerUrn")String customer);

希望有帮助

您可以在服务声明中指定编码。。检查以下示例中的@products注释:

@GET
@Path("/customer/{customerUrn}")
@Produces(MediaType.APPLICATION_XML + ";charset=utf-8")
public Response getCustomerProducts(@PathParam("customerUrn")String customer);

希望有帮助

我在使用JaxRS客户端API通过RestEasy读取(HTTP-GET)资源时遇到了类似的问题

客户端使用org.jboss.resteasy.plugins.providers.jsonp.AbstractJsonpProvider的getCharset方法来确定字符集。作为参数mediaType,使用响应头的“内容类型”:

   public static Charset getCharset(final MediaType mediaType)
   {
      if (mediaType != null)
      {
         String charset = mediaType.getParameters().get("charset");
         if (charset != null) return Charset.forName(charset);
      }
      return Charset.defaultCharset();
   }
defaultCharset()在我的机器上返回windows-1252。相比之下,org.jboss.resteasy.plugins.providers.ProviderHelper默认使用allways UTF-8:

String charset = mediaType.getParameters().get("charset");
if (charset != null) return new String(bytes, charset);
else return new String(bytes, "UTF-8");
我找到了以下解决方案:

  • 设置系统属性文件。encoding=“UTF-8”

  • 将@products(MediaType.APPLICATION_XML+“charset=utf-8”)添加到 jax rs资源(如果您是所有者),以便 在处声明,在响应标头处声明内容类型

  • 将响应读取为字符串并手动解析 (Json.createReader(新StringReader(jsonString)).readObject())


我在使用JaxRS客户端API通过RestEasy读取(HTTP-GET)资源时遇到了类似的问题

客户端使用org.jboss.resteasy.plugins.providers.jsonp.AbstractJsonpProvider的getCharset方法来确定字符集。作为参数mediaType,使用响应头的“内容类型”:

   public static Charset getCharset(final MediaType mediaType)
   {
      if (mediaType != null)
      {
         String charset = mediaType.getParameters().get("charset");
         if (charset != null) return Charset.forName(charset);
      }
      return Charset.defaultCharset();
   }
defaultCharset()在我的机器上返回windows-1252。相比之下,org.jboss.resteasy.plugins.providers.ProviderHelper默认使用allways UTF-8:

String charset = mediaType.getParameters().get("charset");
if (charset != null) return new String(bytes, charset);
else return new String(bytes, "UTF-8");
我找到了以下解决方案:

  • 设置系统属性文件。encoding=“UTF-8”

  • 将@products(MediaType.APPLICATION_XML+“charset=utf-8”)添加到 jax rs资源(如果您是所有者),以便 在处声明,在响应标头处声明内容类型

  • 将响应读取为字符串并手动解析 (Json.createReader(新StringReader(jsonString)).readObject())


我呼叫服务。该申请书是一位客户。很抱歉弄错了。。您确定服务正在返回utf-8吗?您可以使用soapuiYes检查http头,如果我使用UTF8文件编码参数启动一个un-test独立main,那么没有问题您可以显示您的客户端impl吗?无需将编码设置为http客户端的vm参数。如果服务返回utf-8,那么您的客户机应该得到用utf-8I调用服务编码的响应。该申请书是一位客户。很抱歉弄错了。。您确定服务正在返回utf-8吗?您可以使用soapuiYes检查http头,如果我使用UTF8文件编码参数启动一个un-test独立main,那么没有问题您可以显示您的客户端impl吗?无需将编码设置为http客户端的vm参数。如果服务返回utf-8,那么您的客户机应该得到用utf-8编码的响应。很遗憾,旧版本的RESTeasy与区分大小写的字符集匹配。您可以尝试使用
application/json;charset=utf-8
?遗憾的是,旧版本的RESTeasy与区分大小写的字符集匹配。您可以尝试使用
application/json;字符集=utf-8