java – 使用RESTEasy进行错误的特殊字符编码
我正在使用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?¨????¨?¨?¨”这样的东西,并且有球衣休息框架,这个问题不存在. 我该怎么办? 谢谢 解决方法
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); } } 参考How to set charset for my web application? JBoss解决方案 要确保应用程序服务器从客户端请求以正确的编码接收请求参数,您必须配置连接器.对于JBoss AS(版本7之前),更改: <jboss_install>/server/deploy/jbossweb.sar/server.xml 或者在其他JBoss AS版本中: <jboss_install>/server/(default)/deploy/jboss-web.deployer/server.xml 设置连接器URIEncoding: <Connector port="8080" URIEncoding="UTF-8" /> 参考JBoss Seam documentation: 16.1 Internationalizing your app. 通过更改JBoss AS 7及更高版本中的standalone.xml(如this answer(也在JBossDeveloper forum中回答))来完成此配置. 服务器独立解决方 由于以上是JBoss依赖的解决方案,如果不提供独立于服务器的解决方案,我的答案就不会完整. 最基本的是使用context参数指示应用程序中所有表单的字符编码选择.设置上下文参数在WEB-INF / web.xml文件中完成. <context-param> <param-name>PARAMETER_ENCODING</param-name> <param-value>UTF-8</param-value> </context-param> 然后,您的应用程序可以读取上下文参数,并可以在读取任何请求参数之前设置请求字符编码.您可以使用Java Servlet或JSP语法设置请求编码: <% String paramEncoding = application.getInitParameter("PARAMETER_ENCODING"); request.setCharacterEncoding(paramEncoding); String name = request.getParameter("NAME"); %> 参考Character Conversions from Browser to Database. 数据库参与 您可能仍需要设置数据库的字符编码,否则您可能会丢失信息,如下图所示: 参考Character Conversions from Browser to Database. 杂 其他信息见Character encoding JSP -displayed wrong in JSP but not in URL,Tomcat为HttpServletRequest – setCharacterEncoding seems to do nothing. 你也可以set the default encoding for the JVM. 在RESTEasy版本2.3.7中修复了标题为“Text responses should default to charset UTF-8”的错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |