2017-08-30 9 views
0

私はキャメル2.19.1から休憩コンポーネントとのトラブルを持って、私は私がしようとするときに/ {"hello":"world"}Apacheのキャメル2.19 RESTコンポーネント - JSON本体内に二重引用符(getInプロセッサ)

のようなテストJSONを投稿しよう本文からJSONオブジェクトを取得すると、二重引用符なしで文字列を取得します{hello:world}

私のObjectMapperでは、私は二重引用符を持っていないので、エラー:com.fasterxml.jackson.core.JsonParseException: Unexpected character ('h' (code 104)): was expecting double-quote to start field nameがあります。 プロセッサ内の本体からJSONオブジェクトを正しく取得するにはどうすればよいですか?

 rest("/test") 
      .post("/send").description("Post test") 
      .to("direct:test"); 


     from("direct:test").process(new Processor() { 
      @Override 
      public void process(Exchange exchange) throws Exception { 
       log.info("body: " + exchange.getIn().getBody(String.class)); 
       String input = exchange.getIn().getBody(String.class); 
       try { 
        ObjectMapper objectMapper = new ObjectMapper(); 
        JsonNode actualObj = objectMapper.readTree(input); 
        log.info("Object: "+actualObj); 
       } catch (Exception e) { 
        exchange.setException(e); 
       } 
      } 
     }).end(); 

私を助けるためのおかげで、 よろしく

@UPDATE

最後にそれがうまく機能しています。

主な問題は、(私は私のCamelContextを設定CamelConfigurationファイルから)ServletConfigurationから来た:...

http://camel.apache.org/rest-dsl.html

おかげ

@Bean 
CamelContextConfiguration contextConfiguration() { 
    return new CamelContextConfiguration() { 
     @Override 
     public void beforeApplicationStart(CamelContext context) { 
      context.getRestConfiguration().setBindingMode(RestConfiguration.RestBindingMode.off); 
      context.getRestConfiguration().setComponent("servlet"); 
     } 

     @Override 
     public void afterApplicationStart(CamelContext camelContext) { 

     } 
    }; 
} 

RestConfiguration.RestBindingModeは、jsonoffでそれがうまく機能しています

+0

有効なjsonを送信してもよろしいですか?私は前にこの問題を見ていない。 –

+0

解決策(私には奇妙に思われる)が見つかりましたが、データをサービスに送信した方法を聞かせてもらえますか?ビールカール? Camelが自動的に特定のPOJOオブジェクト( '.outType(ListResponse.class)')に要求をマーシャリングするようにしたい場合に 'bindingMode(RestBindingMode.json)'が使われますが、 '.unmarshal ).json(JsonLibrary.Jackson、JSONPayload.class) 'このクラスは、@JsonIgnoreProperties(ignoreUnknown = true)や@JsonInclude(JsonInclude.Include.NON_NULL)のような追加のJackson注釈を持つことができる単純なPOJOクラスです –

答えて

0

マッピングを指定することができますあなたは次のような設定を提供することで、このような設定を提供します:

objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true) 
+0

私はしようとしましたが、このエラーが発生しました: 'com.fasterxml.jackson.core.JsonParseException:予期しない文字(' = '(code 61)):コロンがフィールド名と値を区切ることを期待していました。 – user2367163

関連する問題