[BAEL-6203] Deserialize Generic Type with Jackson (#13764)
This commit is contained in:
parent
4cebc2aaf1
commit
28c8893b38
|
@ -0,0 +1,14 @@
|
||||||
|
package com.baeldung.jackson.deserialization.jsongeneric;
|
||||||
|
|
||||||
|
public class JsonResponse<T> {
|
||||||
|
|
||||||
|
private T result;
|
||||||
|
|
||||||
|
public T getResult() {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResult(T result) {
|
||||||
|
this.result = result;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.baeldung.jackson.deserialization.jsongeneric;
|
||||||
|
|
||||||
|
public class User {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String firstName;
|
||||||
|
private String lastName;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFirstName() {
|
||||||
|
return firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirstName(String firstName) {
|
||||||
|
this.firstName = firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastName() {
|
||||||
|
return lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastName(String lastName) {
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
package com.baeldung.jackson.deserialization.jsongeneric;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.JavaType;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class GenericTypeDeserializerUnitTest {
|
||||||
|
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenJsonObject_whenDeserializeIntoGenericTypeByTypeReference_thenCorrect() throws JsonProcessingException {
|
||||||
|
String json = "{\"result\":{\"id\":1,\"firstName\":\"John\",\"lastName\":\"Lewis\"}}";
|
||||||
|
|
||||||
|
TypeReference<JsonResponse<User>> typeRef = new TypeReference<JsonResponse<User>>() {};
|
||||||
|
JsonResponse<User> jsonResponse = objectMapper.readValue(json, typeRef);
|
||||||
|
User user = jsonResponse.getResult();
|
||||||
|
|
||||||
|
assertThat(user.getId()).isEqualTo(1);
|
||||||
|
assertThat(user.getFirstName()).isEqualTo("John");
|
||||||
|
assertThat(user.getLastName()).isEqualTo("Lewis");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenJsonObject_whenDeserializeIntoGenericTypeByJavaType_thenCorrect() throws JsonProcessingException {
|
||||||
|
String json = "{\"result\":{\"id\":1,\"firstName\":\"John\",\"lastName\":\"Lewis\"}}";
|
||||||
|
|
||||||
|
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(JsonResponse.class, User.class);
|
||||||
|
JsonResponse<User> jsonResponse = objectMapper.readValue(json, javaType);
|
||||||
|
User user = jsonResponse.getResult();
|
||||||
|
|
||||||
|
assertThat(user.getId()).isEqualTo(1);
|
||||||
|
assertThat(user.getFirstName()).isEqualTo("John");
|
||||||
|
assertThat(user.getLastName()).isEqualTo("Lewis");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue