apache 骆驼中的解组(JSON)

问题描述 投票:0回答:2

我是 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();
        }
    }

}

java json apache apache-camel marshalling
2个回答
0
投票

在我的例子中,我将 JsonData 转换为 Java 对象并使用以下依赖项创建了一个自定义 CSV 文件。

  • jackson-mapper-asl
  • 杰克逊核心-asl

您可以创建简单的文本文件或 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


0
投票

使用 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)

祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.