I had a look at the JIRA issue you created for this.
The JacksonMappingProvider is used only to read the Json, not to write it.

With jsonpathWriteAsString, you'd need to register an ObjectMapper which customizes the serialization of the double values. By default, Jackson will use the standard Java String representation for a double which uses the scientific notation.

When using jsonpath(), the result type in your example is actually a Map where the values are Doubles. log("${body}") doesn't use an ObjectMapper at all; it just converts the keys and values to a String. However you could use a customer processor to format the Doubles as you want. For example:
.jsonpath("$").process(new Processor() {
   public void process(Exchange exchange) {
     Object body = exchange.getIn().getBody();
     if (body instanceof Map) {
       for (Object value : ((Map)body).values()) {
         if (value instanceof Double) {
            String d = String.format("%12.2f", value);
...
Is that helpful?

Karen Lease

On 13/04/2022 06:47, Mikael Andersson Wigander wrote:
OK, will do that.

However if I use jsonpathWriteAsString then it uses a global Objectmapper but 
still my problem exists with the numerics, but that is maybe another issue !?




/M


------- Original Message -------
On Wednesday, April 13th, 2022 at 06:44, Claus Ibsen <claus.ib...@gmail.com> 
wrote:


Hi

Ah okay that sounds like a good improvement. You are welcome to create a JIRA.

On Wed, Apr 13, 2022 at 6:35 AM Mikael Andersson Wigander
mikael.andersson.wigan...@pm.me.invalid wrote:

Hi

I have discovered that when using JSONPath in a route, the implementation does 
not use any ObjectMapper registered, it uses it's own.

--------------------------------------------
JacksonMappingProvider.class

public class JacksonMappingProvider implements MappingProvider {

private final ObjectMapper objectMapper;

public JacksonMappingProvider() {
this(new ObjectMapper());
}

public JacksonMappingProvider(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
----------------------------------------------

Is this the intended solution or should we make JSONPath use any globally 
registered mapper as an option?

I have an issue when using JSONPath and my values are numerics and large 
decimal format like 123.456789. They get parsed as Double and then when 
representing the json string they are in scientific notation.
The use of Jackson Features are not available.

When using json as Dataformat we can register a global Objectmapper and use 
that but when using JSONPath it is not implemented.

My Camel version is 3.14.1


/M




--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to