gpt4 book ai didi

json - Apache Camel JSON 编码到 POJO Java Bean

转载 作者:行者123 更新时间:2023-12-04 07:18:14 24 4
gpt4 key购买 nike

我想我有一个简单的问题,但似乎无法弄清楚。

我正在使用一个通过解码 JSON 创建的类作为该方法的参数来调用 POJO。问题是,如何将方法的返回编码回 JSON?

我的路线如下;

from("direct:start")
.choice()
.when(header("methodname").isEqualTo("listCases"))
.unmarshal().json(JsonLibrary.Jackson, UserDetails.class)
.to("bean:com.xxx.BeanA")
.when(header("methodName").isEqualTo("listPersons"))
.unmarshal().json(JsonLibrary.Jackson, CaseDetails.class)
.to("bean:com.xxx.BeanB");

...我正在调用下面的路线;
ProducerTemplate template = camelContext.createProducerTemplate();
template.setDefaultEndpoint(camelContext.getEndpoint("direct:start"));
InvocationResult result = (InvocationResult)template.requestBodyAndHeader(payload, "methodName", methodName);

Payload 是 JSON,在本示例中,methodName 是 listCases 或 listPersons。

我的 InvocationResult 类是通用的,包含一个 String returnCode 属性以及对我想要转换为 JSON 的对象的对象引用。根据执行的是 listCases 还是 listPersons,此对象会有所不同。

谢谢,

比克

最佳答案

我的印象是您的实际问题不在于编码(这应该是完全简单的),而是关于在使用 choice() 路由消息后处理响应。 .您需要关闭 choice()使用 end() 阻止(假设每个分支的结果都以相同的方式处理),然后确保将响应写入 out路由最后一步的消息体。

无论如何,这是我刚刚测试过的一个例子:

public class JacksonTestRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("jetty:http://localhost:8181/foo").to("direct:foo");

from("direct:foo")
.unmarshal().json(JsonLibrary.Jackson, Foo.class)
.choice()
.when().simple("${body.foo} == 'toto'")
.log("sending to beanA")
.to("bean:beanA")
.otherwise()
.log("sending to beanB")
.to("bean:beanB")
// close the choice() block :
.end()
// per the javadoc for marshall(), "the output will be added to the out body" :
.marshal().json(JsonLibrary.Jackson);
}
}

public class Foo {
private String foo; // Constructor and accessor omitted for brevity
}

public class Bar1 {
private String bar1; // Constructor and accessor omitted for brevity
}

public class Bar2 {
private String bar2; // Constructor and accessor omitted for brevity
}

public class BeanA {
public Bar1 doSomething(final Foo arg) {
return new Bar1(arg.getFoo() + "A");
}
}

public class BeanB {
public Bar2 doSomething(final Foo arg) {
return new Bar2(arg.getFoo() + "B");
}
}

发帖 {"foo":"toto"}返回 {"bar1":"totoA"} (和日志 sending to beanA )。

发帖 {"foo":"titi"}返回 {"bar2":"titiB"} (和日志 sending to beanB )。

关于json - Apache Camel JSON 编码到 POJO Java Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40756027/

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