Camel复杂类型到字符串typeconverter错误

时间:2016-08-29 21:03:46

标签: java apache-camel

我正在使用Camel和Spring Boot。在基本上记录消息体的服务路由实现期间,我看到了如下所示的错误。

No converter found capable of converting from type [com.example.Book] to type [java.lang.String]

我的路线是:

from(REST_ENDPOINT_URI)
    .log("${headers}")
    .log("${body}")

我在日志主体行中收到错误。

我的问题是预期的行为?为什么Camel只是调用toString对象的Book方法。如果这是预期的行为,那么我需要为每个新的复杂类型使用字符串转换器?

1 个答案:

答案 0 :(得分:0)

您可以创建一个可重现问题的可运行示例吗?这绝对是Camel通过调用toString来处理的场景。

例如,您可以使用以下方法进行测试:

@Component
public class DemoRouteBuilder extends RouteBuilder {


  @Override
  public void configure() throws Exception {
    from("timer:sender?delay=5s&period=3s")
        .setBody(constant(new Book("Lord of the Rings", "J.R.R. Tolkien")))
        .log("${body}!");
  }

  public static class Book {
    private final String title;
    private final String author;

    public Book(String title, String author) {
      this.title = title;
      this.author = author;
    }

    @Override
    public String toString() {
      return "Book{" +
          "title='" + title + '\'' +
          ", author='" + author + '\'' +
          '}';
    }
  }
}

这导致以下输出:

  

2016-08-30 11:57:49.802 INFO 8778 --- [timer:// sender] route1:预订{title ='指环王',作者=' J.R.R。托尔金'}!

     

2016-08-30 11:57:52.792 INFO 8778 --- [timer:// sender] route1:预订{title ='指环王',作者=' J.R.R。托尔金'}!

     

2016-08-30 11:57:55.795 INFO 8778 --- [timer:// sender] route1:预订{title ='指环王',作者=' J.R.R。托尔金'}!