in spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/json/MappedObject.java [86:107]
private static <T> T valueAt(MappedObject root, JsonNode node, Lookup lookup, String expression, Class<T> type) {
JsonNode result = node.at(expression);
if (result.isMissingNode() && expression.startsWith("/") && expression.length() > 1
&& Character.isLowerCase(expression.charAt(1))) {
StringBuilder alternative = new StringBuilder(expression);
alternative.setCharAt(1, Character.toUpperCase(alternative.charAt(1)));
result = node.at(alternative.toString());
}
if (type.isInterface() && !type.getName().startsWith("java")) {
return (T) Proxy.newProxyInstance(MappedObject.class.getClassLoader(), new Class<?>[] { type },
new MappedInvocationHandler(root, result, lookup));
}
if (result.isMissingNode()) {
return null;
}
try {
return SharedObjectMapper.get().treeToValue(result, type);
}
catch (IOException ex) {
throw new IllegalStateException(ex);
}
}