JSONObject does not work with records without field annotations
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.