WorkflowConfigMapper.java 文件源码

java
阅读 20 收藏 0 点赞 0 评论 0

项目:workflowTools 作者:
@Override
public WorkflowConfig deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
    Class typeClass = (Class) type;
    List<Field> additionalConfigFields = Arrays.stream(typeClass.getFields())
            .filter(field -> field.getAnnotation(SectionConfig.class) != null).collect(Collectors.toList());

    WorkflowConfig config = (WorkflowConfig) ReflectionUtils.newInstance(typeClass);

    List<Field> configurableFields = Arrays.stream(typeClass.getFields())
            .filter(field -> field.getAnnotation(ConfigurableProperty.class) != null).collect(Collectors.toList());

    JsonObject configJsonObject = jsonElement.getAsJsonObject();
    configurableFields.forEach(field -> {
        String fieldName = determineNameToUseForField(field);
        JsonElement fieldJsonObject = configJsonObject.get(fieldName);
        if (fieldJsonObject != null) {
            Object fieldValue;
            if (field.getAnnotation(JsonAdapter.class) != null) {
                JsonDeserializer customDeserializer = (JsonDeserializer) ReflectionUtils.newInstance(field.getAnnotation(JsonAdapter.class).value());
                fieldValue = customDeserializer.deserialize(fieldJsonObject, field.getType(), jsonDeserializationContext);
            } else {
                fieldValue = jsonDeserializationContext.deserialize(fieldJsonObject, field.getType());
            }
            setFieldValue(field, config, fieldValue);
        }
    });

    additionalConfigFields.forEach(field -> {
        Object fieldConfig = jsonDeserializationContext.deserialize(jsonElement, field.getType());
        setFieldValue(field, config, fieldConfig);
    });
    return config;
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号