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
Etes-vous sûr d'envoyer un fichier json valide? Je n'ai pas vu ce problème avant. –
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) ' –