我是 apache camel 的新手。我想用 apache camel 做一些简单的任务。我在这个 url http://localhost:8080/users/ 上有可用的 json 数据。我的休息服务中有 json 数据。但我想获取此 json 数据并使用 apache camel 将其解组为 POJO,并将一些数据写入 txt 文件。但是我的应用程序启动然后就不会停止。
这是我在 http://localhost:8080/users/上可用的 JSON 数据
[{"id":1,"login":"admin","password":"admin","passwordAgain":null,"email":"[email protected]","firstName":"Admin","lastName":"Adminovich","birthday":"2010-10-10","role":{"id":1,"name":"admin"}},
{"id":5,"login":"Snow123","password":"1111","passwordAgain":null,"email":"[email protected]","firstName":"John","lastName":"Snow","birthday":"2010-10-10","role":{"id":2,"name":"user"}}]
spring.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="MyRouteBuilder" class="MyRouteBuilder" init-method="restart">
</bean>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<routeBuilder ref="MyRouteBuilder"/>
</camelContext>
</beans>
我的路线建设者
import Mapping.User;
import Mapping.Users;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;
import org.apache.camel.component.restlet.RestletConstants;
import org.apache.camel.model.dataformat.JsonLibrary;
import org.restlet.Response;
import org.restlet.data.MediaType;
import org.restlet.data.Status;
public class MyRouteBuilder extends RouteBuilder {
private String routePort = null;
private String routeAnswer = null;
public void restart() {
String start = "Route Property Placeholder Example started on port" + " 8080" + "!";
System.out.println(start);
}
public void configure() throws Exception {
from("timer:foo?repeatCount=1").to("http://10.10.34.145:8080/users/").unmarshal().json(JsonLibrary.Jackson, Users.class ).log("STARTED!")
.process(new Processor() {
public void process (Exchange exchange) throws Exception {
Users usersList = exchange.getIn().getBody(Users.class);
exchange.getIn().setBody(usersList.usersList);
System.out.println(usersList.usersList.size());
}
}).to("file:///home/name/username/Desktop/camel.txt").stop();
}
}
用户
package Mapping;
import com.google.gson.FieldNamingStrategy;
import java.lang.reflect.Field;
public class User {
public User() {
}
private int id;
private String login;
private String password;
private String passwordAgain;
private String email;
private String firstName;
private String lastName;
private String birthday;
public void setId(int id) {
this.id = id;
}
public void setLogin(String login) {
this.login = login;
}
public void setPassword(String password) {
this.password = password;
}
public void setPasswordAgain(String passwordAgain) {
this.passwordAgain = passwordAgain;
}
public void setEmail(String email) {
this.email = email;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public void setRole(String role) {
this.role = role;
}
public int getId() {
return id;
}
public String getLogin() {
return login;
}
public String getPassword() {
return password;
}
public String getPasswordAgain() {
return passwordAgain;
}
public String getEmail() {
return email;
}
public String getFirsteName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getBirthday() {
return birthday;
}
public String getRole() {
return role;
}
private String role;
}
用户
package Mapping;
import java.util.ArrayList;
import java.util.List;
public class Users {
public List<User> usersList = new ArrayList<User>();
}
import org.apache.camel.main.Main;
public class MainClass {
public static void main(String[] args) {
Main main = new Main();
main.enableHangupSupport();
MyRouteBuilder rb = new MyRouteBuilder();
main.addRouteBuilder(rb);
try {
main.run(args);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在我的例子中,我将 JsonData 转换为 Java 对象并使用以下依赖项创建了一个自定义 CSV 文件。
您可以创建简单的文本文件或 CSV,无论它是什么。 这是我的路线:
from("couchdb:http://localhost:5984/order")
.startupOrder(1)
.process(new JsonToCsvProcessor())
.to("file:/home/r2/Desktop/ofBizFile?fileExist=append&fileName=orders-${date:now:dd-MM-yyyy}.csv");
这是我的处理器,我将 JsonString 传递给 Pojo 的 ObjectMapper:
{
public void process(Exchange exchange)throws Exception{
String jsonString = exchange.getIn().getBody(String.class);
exchange.getOut().setBody(convertJsonToCSV(jsonString).toString());
}
public StringBuilder convertJsonToCSV(String jsonStringArgs){
StringBuilder csvFile = new StringBuilder();
//Here customize data format using append()
.
.
return csvFile;
}
}
如果您不知道如何使用 ObjectMapper,此链接将为您提供帮助。 https://www.youtube.com/watch?v=02X6U81MdJ0&t=1s
使用 json 案例中的金额之一:Jackson 或 Gson
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jackson</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-gson</artifactId>
<version>${camel.version}</version>
</dependency>
我建议检查文档
你可以直接在路线上解组:
unmarshal().json(JsonLibrary.Jackson, MyModel.class)
或者您可以创建一个处理器:
@Component
public class MyModelUnMarshalProccessor implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
MyModel model = exchange.getIn().getBody(MyModel.class);
exchange.getOut().setBody(model);
exchange.getOut().setHeader("id", body.getId());
}
}
@Autowired
MyModelUnMarshalProccessor myModelUnMarshalProccessor;
from("{{fromServices}}")
.log("${body}")
.process(myModelMarshalProccessor)
祝你好运