fastjson map转对象 string转long 报错
时间: 2023-10-25 21:12:27 浏览: 152
通过fastjson实现各种格式与json之间的转换
如果你使用 Fastjson 将 Map 转换为 Java 对象时,其中某些属性的值是字符串类型,但是 Java 对象中对应的属性类型是 long 或 Long,可能会出现类型转换错误。
这是因为 Fastjson 默认情况下需要将字符串类型的值转换为 Java 对象中对应的属性类型,但是有一些字符串无法直接转换为 long 或 Long 类型,比如包含非数字字符或超出 long 类型的范围等。
为了解决这个问题,你可以使用 Fastjson 提供的一些特性来进行处理。例如,你可以定义一个 ValueFilter 来处理 long 或 Long 类型的属性值。
示例代码:
```
public class LongValueFilter implements ValueFilter {
@Override
public Object process(Object object, String name, Object value) {
if (value instanceof String && (name.equals("longValue") || name.equals("LongValue"))) {
try {
return Long.parseLong((String) value);
} catch (NumberFormatException e) {
return null;
}
}
return value;
}
}
```
然后在将 Map 转换为 Java 对象时,将该 ValueFilter 对象传递给 Fastjson 的 parseObject 方法:
```
Map<String, Object> map = ...
MyObject obj = JSON.parseObject(JSON.toJSONString(map), MyObject.class, new LongValueFilter());
```
这样,如果属性值无法转换为 long 或 Long 类型,就会返回 null,而不是抛出异常。
阅读全文