Верблюд: Unmarshaling json массив для объекта Pojo - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю с Camel-Spring, у меня есть массив Json в ответ на API, как показано ниже:

[{"userName":"name","email":"email"}]

мой объект, как это:

public class Response{

private String userName;
private String email;

setters & getters
}

мой построитель маршрутов:

from("seda:rout")
.routeId("distinaation")
          .unmarshal()
          .json(JsonLibrary.Jackson, Request.class)
          .bean(Bean.class, "processRequest")
          .to(destination)
          .unmarshal()
          .json(JsonLibrary.Jackson, Response.class)
          .bean(Bean.class, "processResponse")

ошибка:

Can not desserialize instance of com.liena.Response out of START_ARRAY token

есть ли способ отменить массив json непосредственно для моего объекта ??

1 Ответ

1 голос
/ 27 апреля 2020

Я решил проблему, используя объектный преобразователь в моем процессоре.

мой построитель маршрутов:

from("seda:rout")
.routeId("distinaation")
          .unmarshal()
          .json(JsonLibrary.Jackson, Request.class)
          .bean(Bean.class, "processRequest")
          .to(destination)
          .bean(Bean.class, "processResponse")

процессор:

public Response processResponse(Exchange exchange) throws IOException {
        String responseStr = exchange.getIn().getBody().toString();
        ObjectMapper mapper = new ObjectMapper();
        List<Response> list = mapper.readValue(responseStr, new TypeReference<List<Response>>({});
        Response response = list.get(0);
        ...}

Еще один короткий способ сделать это будет: в построителе маршрутов:

from("seda:rout")
.routeId("distinaation")
          .unmarshal()
          .json(JsonLibrary.Jackson, Request.class)
          .bean(Bean.class, "processRequest")
          .to(destination)
          .unmarshal(new ListJacksonDataFormat(Response.class))
          .bean(Bean.class, "processResponse")

процессор:

public Response processResponse(List<Response> list {
       Response response = list.get(0);
       ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...