Spring mvc jetty服务器上带resteasy字符编码问题的spring mvc

Spring mvc jetty服务器上带resteasy字符编码问题的spring mvc,spring-mvc,character-encoding,jetty,maven-3,resteasy,Spring Mvc,Character Encoding,Jetty,Maven 3,Resteasy,我试图在jetty服务器上实现restful协议。我有一个可运行的服务器,我可以从我的rest客户端访问它。我的服务器端项目是一个maven项目。我有一个关于字符编码的问题。当我检查响应时,在从控制器发送之前,没有编码问题。但在我将响应返回给客户机之后,我看到了损坏的数据。响应头是UTF-8。我还有一个侦听器来解决这个问题,我正在设置请求和响应UTF-8。我猜当我试图将我的响应数据写入响应时,问题就发生了 @GET @Path("/") @Produces({"application/xml;c

我试图在jetty服务器上实现restful协议。我有一个可运行的服务器,我可以从我的rest客户端访问它。我的服务器端项目是一个maven项目。我有一个关于字符编码的问题。当我检查响应时,在从控制器发送之前,没有编码问题。但在我将响应返回给客户机之后,我看到了损坏的数据。响应头是UTF-8。我还有一个侦听器来解决这个问题,我正在设置请求和响应UTF-8。我猜当我试图将我的响应数据写入响应时,问题就发生了

@GET
@Path("/")
@Produces({"application/xml;charset=UTF-8","application/json;charset=UTF-8"})
public String getPersons(@Context HttpServletRequest request, @Context HttpServletResponse response) {

    List<Person> persons = personService.getPersons(testUserId, collectionOption, null);
    if (persons == null) {
        persons = new ArrayList<Person>();
    }

    String result = JsonUtil.listToJson(persons);
    //result doesnt has any encoding problem at this line

    response.setContentType("application/json");
    response.setContentLength(result.length());
    response.setCharacterEncoding("utf-8");

    //i guess problem happen after this line
    return result;
}

是否有任何jetty配置或resteasy配置?或者有没有办法解决这个问题?感谢您的帮助。

您使用的是哪个resteasy版本?先前版本2.0.1中的字符串存在已知问题

以下是您的选择:

1强制编码返回字节[]

public byte[] getPersons
然后

return result.getBytes("UTF8");
2返回列表或创建人员列表(如果需要)

public List<Person> getPersons

4升级到2.2-beta-1或更新版本。

第一个选项对我来说是不可接受的,因为我可以说我的客户是虚拟的。对于第二个选项,我不能使用它,因为我必须自己转换person object2json。所以这对我来说仍然是一个未解决的问题。谢谢你的选择。你说我的客户是傻瓜是什么意思?我又增加了两个选择。我认为没有其他选择了。谢谢你的回答。前三个选项对我没有用处。因为我的结果类型必须是字符串。我无法使用2.2-beta-1运行我的服务器,我想jetty 6.1.24和resteasy 2.2-beta-1不兼容。我正在研究这个问题。如果我成功运行服务器,我可以看到第四个选项的结果。如果您的问题是由以下原因引起的:java.lang.ClassCastException:com.sun.xml.stream.ZephyrParserFactory无法转换为org.codehaus.stax2.XMLInputFactory2。将其添加到系统属性:javax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory。见:
return new StreamingOutput()
{

    public void write(OutputStream outputStream) throws IOException, WebApplicationException
    {
        PrintStream writer = new PrintStream(outputStream, true, "UTF-8");
        writer.println(result);
    }
};