【问题标题】:Embedded jetty server causing issues with UTF-8 characters嵌入式码头服务器导致 UTF-8 字符问题
【发布时间】:2018-09-22 21:12:42
【问题描述】:

servlet 文件中的代码

 @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
  {
    try {
      Map map = req.getParameterMap();
      HashMap<String, Object> paramsMap = new HashMap<String, Object>(map);
      String action = HTTPUtil.getInstance().getPropertyFromHttpRequest(PARAM_ACTION, paramsMap, false);
      String service = HTTPUtil.getInstance().getPropertyFromHttpRequest(PARAM_SERVICE_NAME, paramsMap, false);
     String requestBody = (String)IOUtils.toString(req.getInputStream());

 ....

requestBody 中的一个字段呈现为“Brad?”而不是 requestBody 中的“Brad's”。理想情况下,应该渲染“Brad's”。这会导致不正确的数据存储在 DB 中。

这就是码头服务器的启动方式:

server = new Server(new QueuedThreadPool(10));
ServerConnector connector = new ServerConnector(server);
connector.setPort(getPort());
server.addConnector(connector);
HandlerCollection handlerCollection = getHandlers();
server.setHandler(handlerCollection);
server.setStopAtShutdown(true);
server.setStopTimeout(1000);
server.start();

getHandlers() return HandlerCollection 创建为:

HandlerCollection handlers = new HandlerCollection(true);
ServletContextHandler handler = new ServletContextHandler();
handler.getContextPath();
handler.addServlet(new ServletHolder(new TestServlet(), "/test");
handlers.addHandler(handler);

码头版本 9.2.11.v20150529

curl -X POST \
  'http://master92.XYZ.com:7777/health?test=10&action=10' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json; charset=utf-8' \
  -d '{"name":"ABA …"}'

请求正文显示为

{"name": "ABA ?" } 当转储到日志或控制台时

【问题讨论】:

  • 什么版本的码头?您的请求标头是什么样的?在 Jetty 获得请求之前,请求的 RAW / 编码形式是什么样的? HTTPUtil 在做什么?
  • 是的,是错字
  • Jetty 版本 9.2.11.v20150529 POST 请求如下所示 \r\n

标签: jetty embedded-jetty


【解决方案1】:

问题已通过 -Dfile.encoding=UTF-8 选项解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多