Mar*_*hov 6 java generics mapping json jackson
对于json映射,我使用以下方法:
public static <T> T mapJsonToObject(String json, T dtoClass) throws Exception {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(json, new TypeReference<RestResponse<UserDto>>() {
});
}
Run Code Online (Sandbox Code Playgroud)
和UserDto看起来像这样:
@JsonIgnoreProperties(ignoreUnknown = true)
public class UserDto {
@JsonProperty("items")
private List<User> userList;
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
}
Run Code Online (Sandbox Code Playgroud)
我想改进这种映射方法,而不必附加到UserDto类,而是将其替换为通用类。
可能吗?如何?
谢谢。
TypeReference 要求您静态地而不是动态地指定参数,因此如果您需要进一步参数化类型,它不起作用。
我认为您需要的是JavaType:您可以使用TypeFactory. 你得到一个TypeFactoryvia的实例ObjectMapper.getTypeFactory()。您还可以JavaType从 simpleClass和TypeReference.
小智 5
一种方法是定义一个 Jackson JavaType来表示clazz类型的项目列表。您仍然需要在运行时访问泛型参数的类。通常的方法是这样的
<T> class XX { XX(Class<T> clazz, ...) ... }
Run Code Online (Sandbox Code Playgroud)
在构造时将泛型参数的类传递给泛型类。
在访问 Class clazz变量时,您可以使用以下语句构造一个 Jackson JavaType,例如表示类clazz的项目列表。
JavaType itemType = mapper.getTypeFactory().constructCollectionType(List.class, clazz);
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助。我在自己的代码中使用这种方法。
| 归档时间: |
|
| 查看次数: |
8903 次 |
| 最近记录: |