RecordViaParser5683Test.java
package tools.jackson.databind.records;
import org.junit.jupiter.api.Test;
import com.fasterxml.jackson.annotation.JsonValue;
import tools.jackson.core.*;
import tools.jackson.databind.*;
import tools.jackson.databind.annotation.JsonDeserialize;
import tools.jackson.databind.deser.std.StdDeserializer;
import tools.jackson.databind.testutil.DatabindTestUtil;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class RecordViaParser5683Test extends DatabindTestUtil
{
@JsonDeserialize(using = Inner.Deser.class)
public record Inner(@JsonValue long value) {
static class Deser extends StdDeserializer<Inner> {
protected Deser() { super(Inner.class); }
@Override
public Inner deserialize(JsonParser p, DeserializationContext ctxt) {
return new Inner(p.readValueAs(Long.class));
}
}
}
public record Outer(Inner inner) { }
/*
/**********************************************************************
/* Test methods
/**********************************************************************
*/
private final ObjectMapper MAPPER = newJsonMapper();
@Test
public void testIssue5683()
{
final String json = "{\"inner\":\"123\"}";
final JsonNode tree = MAPPER.readTree(json);
Outer value;
value = MAPPER.readValue(json, Outer.class);
assertEquals(123L, value.inner.value());
value = MAPPER.treeToValue(tree, Outer.class);
assertEquals(123L, value.inner.value());
value = MAPPER.reader().treeToValue(tree, Outer.class);
assertEquals(123L, value.inner.value());
}
}