2017-08-30 2 views
0

i ont du mal avec le composant de repos de Camel 2.19.1, j'essaie de poster un JSON sur/test comme {"hello":"world"}Apache Camel 2,19 REST Component - Pas guillemet dans le corps JSON (processeur Getin)

Lorsque je tente de obtenir l'objet JSON à partir du corps, j'obtiens une chaîne sans guillemets {hello:world}.

Avec mon ObjectMapper j'ai l'erreur: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('h' (code 104)): was expecting double-quote to start field name parce que je n'ai pas de guillemet double. Comment puis-je obtenir correctement l'objet JSON à partir du corps à l'intérieur d'un processeur?

 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(); 

Merci de me aider, Cordialement

@UPDATE

Enfin, il fonctionne bien.

Le principal problème vient de ServletConfiguration (à partir du fichier CamelConfiguration où je configure mon CamelContext):

@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 était json, avec off il fonctionne bien ...

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

Merci

+0

Etes-vous sûr d'envoyer un fichier json valide? Je n'ai pas vu ce problème avant. –

+0

Bien que vous ayez trouvé une solution (ce qui me semble étrange), puis-je vous demander comment vous avez envoyé des données à votre service? Via curl? Le 'bindingMode (RestBindingMode.json)' est utilisé si vous voulez que Camel marshaler automatiquement la demande à un certain objet POJO (par exemple '.outType (ListResponse.class)'), mais vous pouvez aussi le démouler manuellement en utilisant '.unmarshal () .json (JsonLibrary.Jackson, JSONPayload.class) 'où cette classe est une classe POJO simple qui peut avoir des annotations Jackson supplémentaires comme' @JsonIgnoreProperties (ignoreUnknown = true) 'ou' @JsonInclude (JsonInclude.Include.NON_NULL) ' –

Répondre

0

Vous pouvez spécifier le mappage vior en lui fournissant une configuration comme celle-ci:

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

J'ai essayé mais maintenant j'ai cette erreur (sur le caractère '='): 'com.fasterxml.jackson.core.JsonParseException: Caractère inattendu ('=' (code 61)): attendait un deux-points pour séparer le nom et la valeur du champ' – user2367163