【问题标题】:JAX-RS EncodingJAX-RS 编码
【发布时间】:2011-07-07 10:24:54
【问题描述】:

我正在使用 JAX-RS 创建一个以 JSON 格式返回结果的 Web(rest)服务。

一切正常,除了编码。

例如,我得到:

 ..., parameter:"Dep\u00f3sitos" ,...

代替:

 ..., parameter:"Depósitos" ,...

我尝试过使用:

@Produces("application/json; charset=UTF-8")

但问题仍然存在。如果我只使用 XML 将其返回:

@Produces("application/xml")

一切正常。

我需要设置什么来生成正确的类型?

【问题讨论】:

  • 您能否编辑您的问题以包含您的 JSON 方法的实际代码?

标签: java json rest encoding jax-rs


【解决方案1】:

你只需要这个:

String back = "Depósitos";
return new String(back.getBytes(), "UTF8");

【讨论】:

  • 这是无用且危险的代码。 String.getBytes() 将字符串转换为平台的默认编码。假设您在 Windows 上,所以这可能是 CP1252。然后从这些字节中创建一个新的 String 对象并告诉 Java 必须将字节解释为 UTF-8,即使在此示例中字节是 CP1252 文本,这也会导致问题。进一步:back 已经是一个字符串,Java String 对象可以被视为没有编码的文本(它们在内部用UTF-16 编码,但这并不重要)。仅当将字符串转换为字节时,编码才变得重要。
【解决方案2】:

我最终使用了 GSON 而不是 IBM 的 JSON4J,事实证明它在处理自定义 Java 类序列化方面要好得多。

【讨论】:

    【解决方案3】:

    看看Bryant Luk对问题"How to set the charset with JAX-RS?的回答,看看它是否能解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 2011-12-16
      相关资源
      最近更新 更多