You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JSON替代多case的switch case 存储查询参数实现动态调用

实现方案说明

完全可以通过JSON存储setquery的入参来消除冗余的switch case分支,这种方案还能大幅提升后续维护效率,新增货币类型无需修改业务代码。

1. 适用场景说明

如果不同货币对应的查询语句结构差异较大,无法通过简单字符串拼接生成,推荐用JSON配置的方案;如果所有查询语句仅货币代码字段不同,其余结构完全一致,可直接用字符串格式化实现,无需额外配置文件,两种方案如下:


方案一:JSON配置存储(适用查询结构差异大的场景)

1.1 准备配置文件

在项目资源目录下新建currency_query_config.json,按键值对格式存储货币代码和对应的查询语句:

{
  "GBP": "mutation {GBP}...........",
  "USD": "mutation {USD}...........",
  "INR": "mutation {INR}..........."
  // 剩余42种货币按相同格式补充即可
}

1.2 初始化加载配置

项目启动/类加载时一次性将配置读取到内存Map中,避免每次调用都读取IO影响性能:

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

public class CurrencyQueryConfig {
    private static Map<String, String> currencyQueryMap;

    // 类加载时初始化配置
    static {
        ObjectMapper objectMapper = new ObjectMapper();
        TypeReference<Map<String, String>> typeRef = new TypeReference<Map<String, String>>() {};
        try (InputStream inputStream = CurrencyQueryConfig.class.getClassLoader().getResourceAsStream("currency_query_config.json")) {
            currencyQueryMap = objectMapper.readValue(inputStream, typeRef);
        } catch (IOException e) {
            throw new RuntimeException("货币查询配置加载失败", e);
        }
    }

    public static String getQuery(String currency) {
        return currencyQueryMap.get(currency);
    }
}

1.3 改造原有业务代码

删除原有switch分支,直接读取配置即可:

public static Response postUser(String currency){
    String query = CurrencyQueryConfig.getQuery(currency);
    // 非空校验,避免传入不支持的货币类型
    if (query == null) {
        throw new IllegalArgumentException("不支持的货币类型:" + currency);
    }
    Query.setquery(query);
    // 原有后续业务逻辑保持不变
    return Response;
}

方案二:字符串格式化(适用所有查询结构完全一致的场景)

如果所有查询语句仅货币代码部分不同,其余内容完全一致,不需要额外JSON文件,直接格式化字符串即可:

public static Response postUser(String currency){
    // 通用模板仅需定义一次,%s为货币代码占位符
    String queryTemplate = "mutation {%s}...........";
    Query.setquery(String.format(queryTemplate, currency));
    // 原有后续业务逻辑保持不变
    return Response;
}

额外优化建议

  • 配置文件放在项目resources目录下,打包时会自动打入jar包,无需额外处理路径
  • 后续新增货币类型仅需修改JSON配置,无需修改业务代码,也不需要重新编译业务类
  • 可提前做货币类型合法性校验,避免传入不存在的货币代码返回空值

内容的提问来源于stack exchange,提问作者Raghu K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:33:03