Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions release-notes/VERSION-2.x
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ Project: jackson-databind
#5192: Record types are broken on Android when using R8
(reported by @HelloOO7)
(fix by @pjfanning)
#5197: Add more informative exception for back-references with `record` type
(fix by Joo-Hyuk K)
- Generate SBOMs [JSTEP-14]

2.19.1 (13-Jun-2025)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -787,6 +787,12 @@ protected void addBackReferenceProperties(DeserializationContext ctxt,
}
}
*/
if (beanDesc.isRecordType()) {
ctxt.reportBadTypeDefinition(beanDesc,
"Cannot add back-reference to `java.lang.Record` type '%s' (property '%s')",
beanDesc.getBeanClass().getName(),
refProp.getName());
}
String refName = refProp.findReferenceName();
builder.addBackReferenceProperty(refName, constructSettableProperty(ctxt,
beanDesc, refProp, refProp.getPrimaryType()));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.fasterxml.jackson.databind.records;

import java.util.List;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;

import static org.junit.jupiter.api.Assertions.fail;

// [databind#5188] JsonManagedReference/JsonBackReference exception for records #5188
// (cannot workd
public class RecordBackReference5188Test
extends DatabindTestUtil
{
private final ObjectMapper MAPPER = newJsonMapper();

@Test
public void testRecordDeserializationFail() throws Exception {
final String json = "{\"children\":[{}]}";

try {
MAPPER.readValue(json, Parent.class);
fail("Should not pass");
} catch (InvalidDefinitionException e) {
verifyException(e, "Cannot add back-reference to `java.lang.Record` type ");
verifyException(e, "Invalid type definition for");
verifyException(e, "(property 'parent')");
}
}

record Child(@JsonBackReference Parent parent) {}

record Parent(@JsonManagedReference List<Child> children) {}

}