I’n new in Java and I’m having this error deserializing a JSON to a Java record.
This is my record:
imports...
@JsonIgnoreProperties(ignoreUnknown = true)
public record Character(
@JsonAlias("fullName") String name,
@JsonAlias("hogwartsHouse") String house,
@JsonAlias("birthdate") String birthdate,
@JsonAlias("index") Integer characterID) {
}
This is the JSON I’m receiving from the API:
{
"fullName":"Harry James Potter",
"nickname":"Harry",
"hogwartsHouse":"Gryffindor",
"interpretedBy":"Daniel Radcliffe",
"children":["James Sirius Potter","Albus Severus Potter","Lily Luna Potter"],
"image":"https://raw.githubusercontent.com/fedeperin/potterapi/main/public/images/characters/harry_potter.png",
"birthdate":"Jul 31, 1980",
"index":0
}
And this is the method where I’m trying to deserialize:
public class Principal {
private final String URI = "https://potterapi-fedeperin.vercel.app/es/characters?index=0";
private APIConsumption apiConsumption = new APIConsumption();
private ConvertData converter = new ConvertData();
private ObjectMapper mapper = new ObjectMapper();
public void showMain(){
var json = apiConsumption.consumeAPI(URI);
System.out.println(json);
// Character harry = null;
try {
Character harry = mapper.readValue(json.toString(), Character.class);
System.out.println(harry.toString());
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}
And this is the complete exception I’m getting:
java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.Character` from Object value (token `JsonToken.START_OBJECT`)
at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 1]
at dev.alexcastellanos.potterapi.main.Principal.showMain(Principal.java:23) ~[classes/:na]
at dev.alexcastellanos.potterapi.PotterApiApplication.run(PotterApiApplication.java:19) ~[classes/:na]
at org.springframework.boot.SpringApplication.lambda$callRunner$5(SpringApplication.java:790) ~[spring-boot-3.2.5.jar:3.2.5]
at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:83) ~[spring-core-6.1.6.jar:6.1.6]
at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60) ~[spring-core-6.1.6.jar:6.1.6]
at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:88) ~[spring-core-6.1.6.jar:6.1.6]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) ~[spring-boot-3.2.5.jar:3.2.5]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:789) ~[spring-boot-3.2.5.jar:3.2.5]
at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:774) ~[spring-boot-3.2.5.jar:3.2.5]
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[na:na]
at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[na:na]
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[na:na]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:774) ~[spring-boot-3.2.5.jar:3.2.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:341) ~[spring-boot-3.2.5.jar:3.2.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.5.jar:3.2.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.5.jar:3.2.5]
at dev.alexcastellanos.potterapi.PotterApiApplication.main(PotterApiApplication.java:12) ~[classes/:na]
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.Character` from Object value (token `JsonToken.START_OBJECT`)
at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 1]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1767) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1541) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1446) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:958) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$CharacterDeserializer.deserialize(NumberDeserializers.java:479) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.deser.std.NumberDeserializers$CharacterDeserializer.deserialize(NumberDeserializers.java:425) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4905) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3848) ~[jackson-databind-2.17.0.jar:2.17.0]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3816) ~[jackson-databind-2.17.0.jar:2.17.0]
at dev.alexcastellanos.potterapi.main.Principal.showMain(Principal.java:20) ~[classes/:na]
... 21 common frames omitted
First I was using generic types but I changed it to use Character class directly but it didn’t solve the error.
New contributor
Alejandro Castellanos is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.