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

Spring @GetMapping接口:HashMap值(度数)反查键(方向)实现思路

Spring简易指南针反向查询功能实现思路

现有指南针功能基于Spring开发,使用HashMap存储8个方位与对应0-360度区间的映射关系,已支持传入方向参数查询对应角度范围,要实现传入度数/度数区间反查匹配方向的能力,可按以下方向落地:

模型层改造

  • 调整Compass类的角度存储结构:原本存的是字符串格式的区间(比如"337-359, 0-21"),初始化CompassModel单例时,直接把所有方位的区间字符串解析成结构化的数值范围对象,每个区间记录起始、结束角度值,对North这类跨0度的方位,拆成两个独立的数值区间存储,避免每次查询重复解析字符串。
  • 因为总共只有8个方位的固定数据,不需要额外维护反向映射Map,查询时直接遍历全量方位数据做匹配即可,性能完全满足要求,也不会增加额外的维护成本。
  • 在CompassModel类中新增反向查询的公共方法,分别支持单度数查询、区间查询两种场景的匹配逻辑。

核心匹配逻辑设计

  • 单度数查询场景:首先校验传入的角度值是否在0-360的合法范围内,非法值直接返回参数错误。遍历所有方位的结构化区间,判断传入角度落在哪个区间范围内即可返回对应方位;判断North方位时要分别校验两个跨0度的区间,避免漏判。
  • 角度区间查询场景:首先校验传入的起止角度合法性,对跨0度的传入区间(比如350-10)做特殊标记。遍历方位区间时,判断传入区间和存储的方位区间的重合关系:如果传入区间和某方位区间完全重合,直接返回对应单一方位;如果传入区间覆盖多个方位的范围,返回所有匹配到的方位集合。

Controller层接口扩展

  • 新增独立的反向查询接口,和现有按方向查的接口路径做区分,定义统一的JSON入参格式:支持传入单个degree字段做单度数查询,或传入startDegree、endDegree两个字段做区间查询。
  • 接口层先做基础参数校验,区分查询类型后调用CompassModel的反向查询方法,将匹配到的方向结果封装后返回。

现有代码参考

指南针模型类代码

public class CompassModel implements Serializable {

    private static final CompassModel instance = new CompassModel();

    private final Map<String, Compass> compassModel;

    public CompassModel() {
        compassModel = new HashMap<String, Compass>();

        compassModel.put("North", new Compass("337-359, 0-21"));
        compassModel.put("North-East", new Compass("22-66"));
        compassModel.put("East", new Compass("67-111"));
        compassModel.put("East-South", new Compass("112-156"));
        compassModel.put("South", new Compass("157-201"));
        compassModel.put("South-West", new Compass("202-246"));
        compassModel.put("West", new Compass("247-291"));
        compassModel.put("West-North", new Compass("292-336"));
    }

    public static CompassModel getInstance() {
        return instance;
    }

    public Compass getCompass(String arrow) {
        return compassModel.get(arrow);
    }

    public Map<String, Compass> getAllCompass() {
        return compassModel;
    }
}

Controller层现有代码

private static final CompassModel compass = CompassModel.getInstance();

@GetMapping(value = "/getCompass", consumes = "application/json", produces = "application/json")
public Compass getCompass(@RequestBody Map<String, String> compassArrow) {
    return compass.getCompass(compassArrow.get("direction"));
}

@GetMapping(value = "/getAllCompass", produces = "application/json")
public Map<String, Compass> getAllCompass() {
    return compass.getAllCompass();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 15:51:37