gpt4 book ai didi

java - Camel Rest DSL 响应编码

转载 作者:行者123 更新时间:2023-12-02 05:29:36 27 4
gpt4 key购买 nike

我目前正在开发一个基于 REST 的 java 应用程序,使用新的 Camel REST DSL 作为基础。它大部分工作正常,除了我注意到通过 REST 客户端(而不是浏览器)调用 URL 时,JSON 响应是“乱码”,并且出现了我认为错误的编码

<小时/>

MyRouteBuilder.java

@Component
public class MyRouteBuilder extends RouteBuilder{
@Autowired
LocalEnvironmentBean environmentBean;

@Override
public void configure() throws Exception {
restConfiguration().component("jetty").host("0.0.0.0").port(80)
.bindingMode(RestBindingMode.auto);

rest("/testApp")
.get("/data").route()
.to("bean:daoService?method=getData")
.setProperty("viewClass", constant(CustomeJsonViews.class))
.marshal("customDataFormat").endRest()
.get("/allData").route()
.to("bean:daoService?method=getDatas")
.setProperty("viewClass", constant(CustomeJsonViews.class))
.marshal("customDataFormat").endRest();
}
}
<小时/>

CustomeDataFormat.java

public class CustomDataFormat  implements DataFormat{
private ObjectMapper jacksonMapper;
public CustomDataFormat(){
jacksonMapper = new ObjectMapper();
}
@Override
public void marshal(Exchange exchange, Object obj, OutputStream stream) throws Exception {
Class view = (Class) exchange.getProperty("viewClass");
if (view != null)
{
ObjectWriter w = jacksonMapper.writerWithView(view);
w.writeValue(stream, obj);
}
else
stream.write(jacksonMapper.writeValueAsBytes(obj));

}

@Override
public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
return null;
}
}
<小时/>

完整的工作版本可以在这里找到: https://github.com/zwhitten/camel-rest-test

例如,在 Chrome 中访问 URL {host}/testApp/data 时,响应如下:

{
data: "Sherlock",
value: "Holmes",
count: 10
}

但是使用 Postman 浏览器插件作为客户端返回:

"W3siZGF0YSI6ImRhdGE6OjAiLCJ2YWx1ZSI6InZhbHVlOjowIiwiY291bnQiOjB9LHsiZGF0YSI6ImRhdGE6OjEiLCJ2YWx1ZSI6InZhbHVlOjoxIiwiY291bnQiOjF9LHsiZGF0YSI6ImRhdGE6OjIiLCJ2YWx1ZSI6InZhbHVlOjoyIiwiY291bnQiOjJ9LHsiZGF0YSI6ImRhdGE6OjMiLCJ2YWx1ZSI6InZhbHVlOjozIiwiY291bnQiOjN9LHsiZGF0YSI6ImRhdGE6OjQiLCJ2YWx1ZSI6InZhbHVlOjo0IiwiY291bnQiOjR9LHsiZGF0YSI6ImRhdGE6OjUiLCJ2YWx1ZSI6InZhbHVlOjo1IiwiY291bnQiOjV9LHsiZGF0YSI6ImRhdGE6OjYiLCJ2YWx1ZSI6InZhbHVlOjo2IiwiY291bnQiOjZ9LHsiZGF0YSI6ImRhdGE6OjciLCJ2YWx1ZSI6InZhbHVlOjo3IiwiY291bnQiOjd9LHsiZGF0YSI6ImRhdGE6OjgiLCJ2YWx1ZSI6InZhbHVlOjo4IiwiY291bnQiOjh9LHsiZGF0YSI6ImRhdGE6OjkiLCJ2YWx1ZSI6InZhbHVlOjo5IiwiY291bnQiOjl9XQ=="

问题似乎在于 REST 绑定(bind)模式为“自动”并使用自定义编码器。如果我将绑定(bind)模式设置为“json”,那么浏览器和客户端响应都会出现乱码。如果我将绑定(bind)模式设置为“json”并绕过自定义编码器,则一切正常。有没有办法配置路由以使用自定义编码器并正确编码响应,而不管客户端如何?

最佳答案

我认为解决方案是使用默认绑定(bind)选项(关闭),因为您使用的是自定义编码器。

关于java - Camel Rest DSL 响应编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27301869/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com