81,090
社区成员
发帖
与我相关
我的任务
分享
public class Address {
//@DbColumnMapping("")
private String id;
private String addr;
/*@DbColumnMapping(value="ADDr")
private String adssdr;*/
/*public String getAdssdr() {
return adssdr;
}
public void setAdssdr(String adssdr) {
this.adssdr = adssdr;
}*/
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public Address() {
}
}
public static List parseJsonStringToListWithBean(String jsonString, Class<?> collectionClass, Class<?> beansClass)
{
ObjectMapper mapper = new ObjectMapper();
try {
mapper.enableDefaultTyping();
JavaType javaType = getCollectionType(mapper, collectionClass, beansClass);
List rs = mapper.readValue(jsonString, javaType);
return rs;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static JavaType getCollectionType(ObjectMapper mapper,Class<?> collectionClass, Class<?>... elementClasses) {
return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}
//测试,调用parseJsonStringToListWithBean方法转换
public static void main(String[] args)
{
String str = "[{\"id\":\"10\",\"addr\":\"ss\"}]";
System.out.println(JSONUtils.parseJsonStringToListWithBean(str,List.class, Address.class));
//System.out.println(JSONUtils.parseJsonStringToListWithMap(str));
}
org.codehaus.jackson.map.JsonMappingException: Unexpected token (START_OBJECT), expected VALUE_STRING: need JSON String that contains type id (for subtype of java.util.List)
at [Source: java.io.StringReader@6be46e8f; line: 1, column: 2]
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.StdDeserializationContext.wrongTokenException(StdDeserializationContext.java:261)
at org.codehaus.jackson.map.jsontype.impl.AsArrayTypeDeserializer._locateTypeId(AsArrayTypeDeserializer.java:119)
at org.codehaus.jackson.map.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:87)
at org.codehaus.jackson.map.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromArray(AsArrayTypeDeserializer.java:45)
at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserializeWithType(CollectionDeserializer.java:232)
at org.codehaus.jackson.map.deser.StdDeserializerProvider$WrappedDeserializer.deserialize(StdDeserializerProvider.java:461)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1877)
at common.json.JSONUtils.parseJsonStringToListWithBean(JSONUtils.java:76)
at common.json.JSONUtils.main(JSONUtils.java:117)
private static void testWithJackson() {
String str = "[{\"id\":\"10\",\"addr\":\"ss\"}]";
ObjectMapper mapper = new ObjectMapper();
JavaType javaType = getCollectionType(mapper, List.class, Address.class);
List<Address> listAddress = null;
try {
listAddress = mapper.readValue(str, javaType);
} catch (JsonParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(listAddress);
}
另外实现了google Gson版,觉得比jackson要简单点。有兴趣可以看下
https://github.com/FS1360472174/javaweb/blob/master/java-web/src/util/JsonStringtoListBean.java