当前位置: 首页 > 知识库问答 >
问题:

骆驼:码头响应编码

符畅
2023-03-14

我想在Camel环境中使用Jetty组件。这是我的spring配置的摘录。xml:

...
<bean id="webEnc" class="web.WebEnc" />
<camelContext>
    <route>
        <from uri="jetty:http://0.0.0.0/enc" />
        <process ref="webEnc" />
    </route>
</camelContext>
...

下面是用于返回字符串的代码:

import org.apache.camel.Exchange;
import org.apache.camel.Processor;

public class WebEnc implements Processor{

    @Override
    public void process(Exchange exchange) throws Exception {
        exchange.getOut().setBody("abcäöüß\"€一二三"); //the last three symbols are chinese for '123'
    }
}

本地地址有效(http://127.0.0.1/enc)但是浏览器没有正确显示字符串(显示为“abcÃö¼ÃŸ”–äääääŒääää‰)。我假设问题是一些编码。如何设置像“utf-8”这样的编码?
我在这里找不到任何提示(http://camel.apache.org/jetty.html)关于编码或字符集之类的。

共有2个答案

百里修真
2023-03-14

在得到一些帮助和提示后,我找到了一个很好的解决方案。这迫使Jetty交付字节,而不是字符串:

exchange.getOut().setBody("abcäöüß\"€一二三".getBytes("utf-32"));

为了帮助浏览器显示正确的符号,我执行了以下操作:

exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "text/html; charset=utf-32");

我的火狐不能用utf-32显示中文符号,用utf-8可以。Chrome用两种编码都可以。
但实际上我对此不感兴趣,我的目的是传递字节。getBytes()完成这项工作。

方航
2023-03-14

我认为您必须在输出消息中使用utf-8字符集设置内容类型标头,如下所示:

@Override
public void process(Exchange exchange) throws Exception {
    exchange.getOut().setBody("abcäöüß\"€一二三"); //the last three symbols are chinese for '123'
    exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "text/html; charset=utf-8");
}
 类似资料:
  • 我是第一次使用Camel。我的试验项目是编写一个应用程序,该应用程序接收HTTP GET请求(使用Jetty)并通过Thrift将请求传递到另一台服务器。然后将收到的答案传递回客户端。(即,如果您愿意,我正在编写超文本传输协议-get请求和Thrift支持的服务器之间的数据交换机或中间件应用程序。) 我有一个完美的非驼峰版本,现在我正在尝试将驼峰等效物组合在一起。目前,我只想将jetty请求写入一

  • 我知道有一些方法可以捆绑应用程序并将其部署在Tomcat或Jetty中。但是,如果我这样做了,最大的问题就变成了如何与Restlet集成。 我做了进一步的挖掘。我举了骆驼附带的一个tomcat例子。然后我试着让它具有RESTLET功能。差不多管用了。现在的问题是参数没有传递到路由。我希望当调用这个服务器:http://x.x.x.x.x:8080/rs/user/?name=Paul时,我会得到:

  • 我使用以下路线: endpoint: 如果文件大小超过2 MB,则会发生以下异常:(Camel-Jetty超文本传输协议代理大响应数据原因问题:超出缓冲容量) 问题: 有没有办法避免这种缓冲问题?(可能使用另一个组件代替jetty?) 由于码头endpoint中的主体没有改变,我想知道是否有可能将主体直接“绕过”到下一个endpoint。

  • 我正在用apache Camel构建一个spring boot应用程序。我想让camel中的DSL监听spring boot启动时的相同端口。 我尝试了这个链接,但如果不使用组件,就无法解析它。我不希望我的路由看起来像,而是希望直接使用jetty Build.Gradle

  • 问题内容: 如何在对UTF-8的回复中设置默认字符编码? 我已经试过了 还有这个 都不起作用-响应仍与标头一起发送 我想对所有text / html响应都执行此操作,理想情况下是使用代码而不是XML。我正在使用Jetty 9。 问题答案: Jetty文档声称它默认情况下使用UTF-8,但这似乎是一个谎言。如果执行normal ,则内容编码如下确定。 从content-type到content-en

  • 我的骆驼路线是CXF接收器 错误消息:没有可用的正文类型: com.customer.requestcustomeremail.SendEmailRequest 但具有值:com.customer.requestcustomeremail.SendEmailRequest@1bcd32c6类型:java.lang.String on: Message[]。原因:没有类型转换器可用于从类型:java