in johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java [231:281]
private boolean writePrimitives(final Object value) {
boolean handled = false;
if (value == null) {
return true; // fake a write
}
final Class<?> type = value.getClass();
if (type == String.class) {
generator.write(value.toString());
handled = true;
} else if (JsonValue.class.isAssignableFrom(type)) {
generator.write(JsonValue.class.cast(value));
handled = true;
} else if (type == long.class || type == Long.class) {
final long longValue = Long.class.cast(value).longValue();
if (isInJsRange(longValue)) {
generator.write(longValue);
} else {
generator.write(value.toString());
}
handled = true;
} else if (isInt(type)) {
generator.write(Number.class.cast(value).intValue());
handled = true;
} else if (isFloat(type)) {
if (type == Float.class || type == float.class) {
if (!Float.isNaN(Float.class.cast(value))) {
generator.write(new BigDecimal(value.toString()));
}
} else {
final double doubleValue = Number.class.cast(value).doubleValue();
if (!Double.isNaN(doubleValue)) {
generator.write(doubleValue);
}
}
handled = true;
} else if (type == boolean.class || type == Boolean.class) {
generator.write(Boolean.class.cast(value));
return true;
} else if (type == BigDecimal.class) {
generator.write(BigDecimal.class.cast(value));
handled = true;
} else if (type == BigInteger.class) {
generator.write(BigInteger.class.cast(value));
handled = true;
} else if (type == char.class || type == Character.class) {
generator.write(Character.class.cast(value).toString());
handled = true;
}
return handled;
}