uni-app中type自定义类型里敏感字和符号用@JSON_FIELD处理,敏感字设为1的方法

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app中type自定义类型里敏感字和符号用@JSON_FIELD处理,敏感字设为1的方法
type自定义类型 中敏感字和符合用 @JSON_FIELD 敏感字为 数字 1 呢

图片

1 回复

uni-app 中,如果你需要在自定义类型里处理敏感字和符号,并且使用 @JSON_FIELD 注解来进行序列化和反序列化,你可以通过自定义的序列化逻辑来实现将敏感字设为 1 的需求。下面是一个示例代码,展示了如何在 uni-app 中使用 @JSON_FIELD 注解处理敏感字,并在序列化过程中将敏感字替换为 1

首先,我们需要定义一个包含敏感字段的自定义类型,并使用 @JSON_FIELD 注解来指定自定义的序列化器和反序列化器。在这个例子中,我们将使用 fastjson 库,它是 uni-app 中常用的 JSON 处理库。

1. 引入依赖

确保你的项目中已经引入了 fastjson 库。如果没有,可以在 package.json 中添加依赖,或者使用 CDN 引入。

2. 自定义类型与注解

import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.deserializer.ObjectDeserializer;
import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.serializer.JSONSerializerFeature;
import com.alibaba.fastjson.serializer.ValueFilter;

public class SensitiveData {

    @JSONField(serializeUsing = SensitiveSerializer.class, deserializeUsing = SensitiveDeserializer.class)
    private String sensitiveWord;

    // Getters and Setters
    public String getSensitiveWord() {
        return sensitiveWord;
    }

    public void setSensitiveWord(String sensitiveWord) {
        this.sensitiveWord = sensitiveWord;
    }

    // Custom Serializer
    public static class SensitiveSerializer implements ObjectSerializer {
        @Override
        public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
            SensitiveData data = (SensitiveData) object;
            if ("敏感词".equals(data.getSensitiveWord())) { // 假设 "敏感词" 是我们要替换的敏感字
                serializer.write(1);
            } else {
                serializer.write(data.getSensitiveWord());
            }
        }
    }

    // Custom Deserializer
    public static class SensitiveDeserializer implements ObjectDeserializer {
        @Override
        public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
            JSONObject jsonObject = parser.parseObject();
            SensitiveData data = new SensitiveData();
            if (jsonObject.containsKey("sensitiveWord")) {
                Object value = jsonObject.get("sensitiveWord");
                if (value instanceof Integer && (Integer) value == 1) {
                    data.setSensitiveWord("敏感词"); // 反序列化时恢复为原始敏感字
                } else {
                    data.setSensitiveWord(value.toString());
                }
            }
            return (T) data;
        }

        @Override
        public int getFastMatchToken() {
            return 0;
        }
    }
}

3. 使用示例

SensitiveData data = new SensitiveData();
data.setSensitiveWord("敏感词");

String jsonString = JSON.toJSONString(data, SerializerFeature.PrettyFormat);
System.out.println(jsonString); // 输出: {"sensitiveWord":1}

SensitiveData deserializedData = JSON.parseObject(jsonString, SensitiveData.class);
System.out.println(deserializedData.getSensitiveWord()); // 输出: 敏感词

以上代码展示了如何在 uni-app 中使用 @JSON_FIELD 注解处理敏感字,并在序列化和反序列化过程中进行自定义处理。

回到顶部