new JSONObject(object) or JSONObject.wrap(object) does not work if the object is a record without @JSONPropertyName on its fields.
The flow eventually reaches out to JSONObject.getKeyNameFromMethod(Method method), and looking into the version 20250517 code, we can see that:
JSONPropertyName annotation = getAnnotation(method, JSONPropertyName.class);
if (annotation != null && annotation.value() != null && !annotation.value().isEmpty()) {
return annotation.value();
}
String key;
final String name = method.getName();
if (name.startsWith("get") && name.length() > 3) {
key = name.substring(3);
} else if (name.startsWith("is") && name.length() > 2) {
key = name.substring(2);
} else {
return null;
}
If the field is not annotated with @JSONPropertyName and if it doesn't start with get or is, then it will return null.
Since records don't use prefixes on getters, it will always be represented as {} an empty object.
new JSONObject(object)orJSONObject.wrap(object)does not work if the object is a record without@JSONPropertyNameon its fields.The flow eventually reaches out to
JSONObject.getKeyNameFromMethod(Method method), and looking into the version20250517code, we can see that:If the field is not annotated with
@JSONPropertyNameand if it doesn't start withgetoris, then it will return null.Since records don't use prefixes on getters, it will always be represented as
{}an empty object.