FasterXML / FasterXML/jackson-modules-base

NoCtorDeser can not deserialize parameterized types

Đang mở
#193 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
no-ctor-deser
Ngôn ngữ chính
Java
Star
180
Fork
80
Merge trung bình
3 giờ 26 phút
Pull request đã merge (30 ngày)
1

Mô tả

# Code
The following code throws java.lang.ClassCastException. The type of `response.getPayload()` is not `User` but `LinkedHashMap`

```java
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.module.noctordeser.NoCtorDeserModule;

public class Demo {

public static class Response {

private final T payload;

public Response(T payload) {
this.payload = payload;
}

public T getPayload() {
return payload;
}
}

public static class User {

private final String name;

public User(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

public static void main(String[] args) throws Exception {
String json = "{\"payload\":{\"name\":\"jackson\"}}";
JsonMapper mapper = JsonMapper.builder()
.addModule(new NoCtorDeserModule())
.build();

ObjectReader objectReader = mapper.readerFor(new TypeReference>() {
});
Response response = objectReader.readValue(json);
System.out.println(response.getPayload().getClass());
}
}
```

# Cause
@cowtowncoder It seems the JsonDeserializer is fetched by `Class instClass` rather than a ParameterizedType.

https://github.com/FasterXML/jackson-modules-base/blob/2.15/no-ctor-deser/src/main/java/com/fasterxml/jackson/module/noctordeser/MissingInstantiatorHandler.java#L34-L37

# Solution
The overrided method `DeserializationProblemHandler#handleMissingInstantiator(DeserializationContext ctxt, Class instClass, ValueInstantiator valueInst, JsonParser jsonParser, String msg)` does not suppy generic information. Maybe we can extend class AnnotatedWithParams and override its `public abstract Object call() throws Exception;`. Then we set it to the StdValueInstantiator's _defaultCreator field?

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.