[英]How can i use an unknown class or a list as a parameter in java?
我有一个 json 响应。 我正在使用 Jackson 来制作 Java Object 来自 Z466DEEC76ECDF34FCA6D385444 响应。
ObjectMapper objectMapper = new ObjectMapper();
List<WorkPosition> workPositions = new ArrayList<>();
try {
workPositions = (List<WorkPosition>) objectMapper.readValue(response.body(), new TypeReference<List<WorkPosition>>() {});
} catch (Exception e) {
e.printStackTrace();
}
我想创建一个名为 Jackson 的 class 并使此代码成为 static 方法。
public class Jackson {
static ObjectMapper objectMapper = new ObjectMapper();
public static List<WorkPosition> parseList(String body){
List<WorkPosition> list = new ArrayList<>();
try {
list = (ArrayList<WorkPosition>) objectMapper.readValue(body, new TypeReference<List<WorkPosition>>(){});
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return list;
}
}
以上代码仅适用于 WorkPosition class。 我想让它适用于所有 class。 我尝试过 List<?>、T<>,还尝试将返回的列表作为参数。 但我没有工作。 如何才能做到这一点?
我认为这是不可能的,因为您试图使动态的是类型参数本身。 因此,更好的方法是拥有一种可以反序列化为任何类型的方法,而不仅仅是List
。
所以,如果你有这样的方法:
public static <T> T deser( String json, TypeReference<T> typeRef ){
if( json == null || json.length() == 0 ) return null;
try{
return MAPPER.readValue( json, typeRef );
}
catch( IOException e ){
throw new RuntimeException( e );
}
}
其中MAPPER
是ObjectMapper
的一个实例,然后可以从以下位置调用它:
deser( "{<json-string-here>}", new TypeReference<ArrayList<SomeClass>>(){} );
这个 class 甚至可以用于非List
案例。
deser( "{<json-string-here>}", new TypeReference<SomeClass>(){} );
假设SomeClass
具有无参数构造函数或 Jackson 创建者方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.