2016-08-29 9 views
1

私はキャメルスプリングブートを使用しています。基本的にメッセージ本文のロギングであるサービスルートの実装中に、以下のようなエラーが発生しました。キャメル複合型から文字列型変換エラー

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がBookオブジェクトのtoStringメソッドを呼び出しているのはなぜですか?また、これが期待される動作であれば、新しい複合型ごとに文字列コンバーターが必要ですか?

+0

ます( "$ {body.toString}")の.logを試してみたのですか? toString()が定義されていると仮定します。 –

答えて

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年8月30日11:57:49.802 INFO 8778 --- [タイマーを:// sender] route1:Book {title = 'ロードオブザリング'、作者= 'JRR Tolkien '}!

2016-08-30 11:57:52.792 INFO 8778 --- [timer:// sender] route1:Book {タイトル= 'Lord of the Rings'、作者= 'J.R.R。 Tolkien '}!

2016-08-30 11:57:55.795 INFO 8778 --- [timer:// sender] route1:Book {タイトル= 'Lord of the Rings'、作者= 'J.R.R。 Tolkien '}!

関連する問題