热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用RESTEasy进行错误的特殊字符编码

如何解决《使用RESTEasy进行错误的特殊字符编码》经验,为你挑选了1个好方法。

我正在使用jboss eap 6.3开发一个使用resteasy rest框架的web应用程序,我在POST资源中以FormParam传递的特殊字符有一个不好的编码问题,例如:

@POST
@Path("/post")
public Response createTask(@FormParam("param") String param) {
    LOGGER.info("HELLO POST XML. "+param);

    return Response.ok(param).build();

}

如果我通过像abcèèè这样的东西,我会得到像"abcèÃÃÃèèè"这样的东西,并且有球衣休息框架,这个问题不存在.

我该怎么办?

谢谢



1> gknicker..:

RESTEasy解决方案

由于RESTEasy使用servlet解释了对您的请求,因此最好使用servlet过滤器来设置请求字符编码:

public class CharacterEncodingFilter implements javax.servlet.Filter {

  // ...

  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain filterChain) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    filterChain.doFilter(request, response);
  }
}  

参考如何为我的Web应用程序设置charset?

JBoss解决方案

要确保应用程序服务器从客户端请求以正确的编码接收请求参数,您必须配置连接器.对于JBoss AS(版本7之前),更改:

/server/deploy/jbossweb.sar/server.xml

或者在其他JBoss AS版本中:

/server/(default)/deploy/jboss-web.deployer/server.xml

设置连接器URIEncoding:


参考JBoss Seam文档:16.1国际化您的应用程序.

通过standalone.xml在JBoss AS 7及更高版本中进行更改来完成此配置,如本答案中所述(在JBossDeveloper论坛中也得到了回答).

服务器独立解决方

由于以上是JBoss依赖的解决方案,如果不提供独立于服务器的解决方案,我的答案就不会完整.

最基本的是使用context参数指示应用程序中所有表单的字符编码选择.设置上下文参数在WEB-INF/web.xml文件中完成.


  PARAMETER_ENCODING
  UTF-8

然后,您的应用程序可以读取上下文参数,并可以在读取任何请求参数之前设置请求字符编码.您可以使用Java Servlet或JSP语法设置请求编码:

<%
  String paramEncoding = application.getInitParameter("PARAMETER_ENCODING");
  request.setCharacterEncoding(paramEncoding);
  String name = request.getParameter("NAME");
%>

从浏览器到数据库的参考字符转换.

Database involvement

You may still have to set the character encoding of your database, otherwise you can lose information as in this diagram:

为ASCII配置的数据库

Reference Character Conversions from Browser to Database.

Miscellaneous

Additional information at Character encoding JSP -displayed wrong in JSP but not in URL and for Tomcat at HttpServletRequest - setCharacterEncoding seems to do nothing.

You can also set the default encoding for the JVM.

A bug titled "Text responses should default to charset UTF-8" was fixed in RESTEasy version 2.3.7.


谢谢,我解决方案只需添加一个过滤器,设置为utf-8字符编码,如上所示
推荐阅读
author-avatar
渐我素小黑陈琼敏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有