fastjson解析、自定义seekBar的onTouchEvent、ScrollView或者ListView的拖拽阴影笔记

本文介绍了使用com.alibaba.fastjson库进行JSON数据解析的方法,并强调了解析目标类不能是内部类的重要性。此外,还讨论了自定义SeekBar组件时如何正确处理触摸事件及去除ScrollView或ListView拖拽时出现的阴影。


1、我们平时都喜欢用com.alibaba.fastjson将网络获取的json数据解析成实体类,

并且通过http://www.bejson.com/网站的“JSON生成Java实体类”功能很容易得到实体类,步骤如下。

AAA a= JSON.parseObject(jsonData, AAA.class);//json返回数据为jsonobject
                List<BBB> blist= JSON.parseArray(jsonData, BBB.class);//json返回数据为jsonarray

但是需要注意的是,这里的AAA类和BBB类都不能是解析json所在类的内部类,否则会报错:

com.alibaba.fastjson.JSONException: create instance error, class com...AAA

但是实体类AAA类和BBB类里是可以包含内部类的。

(json解析实体类中List可以不new)



2、自定义seekBar重写了父类的onTouchEvent(MotionEvent event)方法,自己处理了event.getAction(),并且return true;

但是监听时不执行onStartTrackingTouch()和onStopTrackingTouch()方法,此时需要在onTouchEvent(MotionEvent event)方法里加上super.onTouchEvent(event);就行了。



3、在使用ScrollView或者ListView时,拖拽时会出现顶部或底部阴影,只需要在xml里加上android:overScrollMode="never"就可以将阴影取消掉。


<think>好的,用户想了解如何在FastJson2中实现自定义局部序列化规则。我需要先回忆一下FastJson2的相关知识,特别是过滤器和序列化相关的接口。记得FastJson2提供了过滤器接口,比如ContextValueFilter,可以用来在序列化过程中对特定字段进行处理。 首先,用户可能希望局部应用这些规则,而不是全局配置。所以需要找到在特定场景下使用过滤器的方法。例如,在序列化某个对象时,通过注解或者编程方式应用自定义的过滤器。可能需要参考引用中的信息,比如引用[1]提到FastJson2提供了标准的过滤器接口,通过自定义过滤器并在序列化时触发。所以具体的步骤可能是实现一个过滤器,然后在序列化时指定使用它。 接下来,可能需要一个示例代码。比如,定义一个ContextValueFilter,在过滤器中判断字段名或值,进行相应的处理,比如脱敏或者格式化日期。例如,对手机号中间四位加星号处理。然后在使用JSON.toJSONString时传入这个过滤器。 另外,用户可能想知道如何结合注解使用,或者是否有类似Jackson的局部注解方式。但FastJson2可能更倾向于使用过滤器来实现,所以需要说明通过过滤器的方式,在需要的地方传入参数。 还需要考虑是否需要配置到全局的ObjectMapper,或者是否每次序列化时手动指定。根据引用[2],可能配置类中使用Bean,但用户的问题是关于局部的,所以应该是在调用序列化方法时传入过滤器实例。 最后,确保示例代码正确,语法无误,使用中文解释清楚每个步骤,并生成相关问题,帮助用户进一步了解。</think>### FastJson2 自定义局部序列化规则实现方法 #### 实现步骤 1. **实现过滤器接口** FastJson2 提供 `ContextValueFilter`、`PropertyPreFilter` 等接口,通过实现这些接口可自定义序列化逻辑。例如,使用 `ContextValueFilter` 实现手机号脱敏: ```java public class MobileFilter implements ContextValueFilter { @Override public Object process(JSONContext context, Object source, String name, Object value) { if ("mobile".equals(name) && value instanceof String) { String mobile = (String) value; return mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); } return value; } } ``` 2. **局部应用过滤器** 在序列化时通过 `SerializerFeature.WriteNonStringValueAsString` 参数触发过滤器: ```java User user = new User("张三", "13812345678"); String json = JSON.toJSONString(user, new MobileFilter(), // 应用自定义过滤器 SerializerFeature.PrettyFormat); ``` #### 注解结合方式 若需基于注解实现更细粒度的控制,可结合 `@JSONField` 注解: ```java public class User { @JSONField(serializeUsing = MobileSerializer.class) private String mobile; // 其他字段 } ``` 需实现 `ObjectSerializer` 接口: ```java public class MobileSerializer implements ObjectSerializer { @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) { String value = (String) object; serializer.write(value.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")); } } ``` #### 对比 Jackson 的局部控制 与 Jackson 的 `@JsonSerialize` 注解不同[^3],FastJson2 主要通过过滤器或自定义序列化类实现局部控制,灵活性较高但配置稍显复杂[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值