使用RESTEasy / jax-rs编码响应的字符

时间:2011-11-22 21:12:01

标签: java jax-rs resteasy

我在我的服务器上使用RESTeasy为jax-rs设置。我的客户端发送一个包含字符'✓'的字符串,服务器可以存储该字符(我可以确认它在服务器上正确存储)。但是,服务器似乎无法在响应中返回“✓” - 而是“?”被发送。

我假设我需要指定返回编码或其他东西,但我不知道在哪里做,或者如何检查以查看当前编码是什么!

如何在服务器上指定编码,以便在响应中返回“✓”?

编辑以添加代码

我的服务器代码:

@Path("compiled/{rootReportGroupId}")
@GET
@Produces("text/html; charset=UTF-8")
@NoCache
public String getCompiledReports(@PathParam("rootReportGroupId") Long rootReportGroupId){
    return "✓";
}

示例请求:

GET http://192.168.0.12:8888/rest/reports/compiled/190
Host    192.168.0.12:8888
User-Agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
Content-Type    application/json

回复标题:

Cache-Control   public, no-transform, no-cache
Content-Type    text/html;charset="UTF-8"
Content-Length  1
Server  Jetty(6.1.x)

回应机构:

?

3 个答案:

答案 0 :(得分:3)

有点漫无边际,所以我把它写进了一个答案,但这主要是一个评论。

出于好奇,您使用的是什么版本的Java,Rest Easy,编译器设置?

我使用你在MacOS 10.6,RestEasy 2.2.3.GA,Java 1.6.0_29,Tomcat 7.0.22上发布的代码,它运行正常(我删除了参数,但它似乎没有有关)。

用于在服务器端读写的代码是什么?是否存在编码问题?

我也怀疑你的回复标题,特别是:

Content-Type    text/html;charset="UTF-8"

我认为应该是:

Content-Type    text/html;charset=UTF-8

答案 1 :(得分:2)

  

如何在我的服务器上指定编码,以便我可以返回'✓'   在回应?

要配置三个层:

  1. 浏览器显示和表单提交
  2. JSP

    <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
    

    HTML

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
    1. 网络服务器处理
    2. JSP

      <%
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("NAME");
      %>
      

      Servlet中的相同类型的东西。请参阅this answer中的JBoss特定解决方案以及完整的服务器独立解决方案。

      1. 数据库设置
      2. 您可能正在丢失数据库级别的字符信息。检查以确保您的数据库编码也是UTF-8,而不是ASCII。

        有关此主题的完整讨论,请参阅Java文章Character Conversions from Browser to Database

答案 2 :(得分:0)

我认为问题在于您的IDE /文本编辑器正在以另一种编码保存文件,因此您使容器返回UTF-8编码,但文本不是包含的,这会导致问题发生。 / p>

此致 栾