调用DynamoDB Query报InternalError:NoneType无split属性,原因何在?
问题原因分析
从错误信息和提供的代码来看,查询失败的核心原因是代码存在语法错误,导致QueryRequest对象构建不完整,传递给DynamoDB的请求参数存在空值,具体细节如下:
语法错误:括号未闭合
示例代码中,withExpressionAttributeValues方法内的Map.of(...)缺少闭合的右括号:.withExpressionAttributeValues(Map.of(":jid_mth", new AttributeValue("1_12")) // 此处缺失一个 ) 用于闭合 Map.of() 方法调用 .withLimit(limit);这个语法错误会导致编译器无法正确解析代码,最终构建出的
QueryRequest对象中,expressionAttributeValues字段会是null,或者直接导致对象构建失败,传递了不完整的请求参数给DynamoDB API。触发异常的直接诱因
当DynamoDB的服务端接收到包含空值的请求参数时,内部处理逻辑在执行split操作时遇到了NoneType(对应Java中的null)对象,从而抛出了该InternalError异常。
修复方案
补全缺失的右括号,修正后的代码如下:
final var query = new QueryRequest() .withIndexName(Indexes.SORT_BY_JOB_COUNT) .withScanIndexForward(false) .withKeyConditionExpression(AttributeKeys.JOB_ID_MONTH + " = :jid_mth") .withExpressionAttributeValues(Map.of(":jid_mth", new AttributeValue("1_12"))) .withLimit(limit);
内容的提问来源于stack exchange,提问作者stwr667
相关产品推荐
相关产品推荐

