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

RestEasy Lambda应用空字符串参数触发数组越界异常求助

问题排查:RestEasy Lambda接口空查询参数触发ArrayIndexOutOfBoundsException

问题背景

在RestEasy Lambda应用中实现了接口 http://localhost:8080/store/search/v1/suggest,处理器代码片段如下:

public List<Map<String, Object>> storeSearch(
      @RestHeader("id") String id,
      @RestQuery final String q,
      @RestQuery final String columns) {

    if (StringUtils.isBlank(q)) {
      logger.error("Search query is empty");
      return Collections.EMPTY_LIST;
    }
    // 后续未展示的业务逻辑代码
}

该接口在以下场景运行正常:

  • http://localhost:8080/store/search/v1/suggest?q=ab
  • http://localhost:8080/store/search/v1/suggest

但访问 http://localhost:8080/store/search/v1/suggest?q=(q为空字符串)时,触发ArrayIndexOutOfBoundsException异常。

原因分析

从现有代码逻辑看,StringUtils.isBlank(q)本应覆盖q为null或空字符串的情况,直接返回空列表,不会执行后续代码。但实际触发异常,说明问题出在未展示的后续业务逻辑中,可能的情况包括:

  1. 后续代码对空字符串q执行了未做判空的数组操作
    比如对q进行拆分、数组索引访问等操作时忽略了空字符串场景。例如:

    // 示例错误代码:当q为空字符串时,split返回长度为1的数组,若后续错误访问索引1则触发异常
    String[] keywords = q.split(" ");
    String firstKeyword = keywords[1];
    
  2. 参数注入的特殊场景
    虽然@RestQuery通常会将q=解析为空字符串,但极少数框架解析异常可能导致注入的q为异常类型(如空数组),不过这种概率极低,优先排查业务代码。

  3. columns参数的连带影响
    若columns在q为空时也传入空值,且后续代码对columns的数组操作未做判空,也可能触发异常,但需结合请求场景确认是否仅在q=时出现问题。

排查建议

  • 打印完整的异常栈信息,定位触发异常的具体代码行,这是最直接的排查方式。
  • 补全处理器的完整代码,重点检查StringUtils.isBlank(q)之后涉及数组操作的逻辑。
  • 在判断分支前后打印q的实际值和类型,确认参数注入是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:30:21