One or more parameter values were invalid
TL;DR — DynamoDB 接受了请求的形态,但拒绝了其中一个特定的值:一个空集合、一个键中的空字符串、一个类型与模式不匹配的值,或一个不被允许的 null。读消息的其余部分——它会指明确切的参数——并修复那个值。
含义
ValidationException: One or more parameter values were invalid: <specific reason>这是一个 ValidationException(HTTP 400),其消息体精确指出了一个违反规则的值——AWS 只把消息记载为"varies, depending upon the specific error(s) encountered"。前缀是通用的;重要的部分是它后面的内容——例如一个 AttributeValue 不能为键包含空字符串、一个集合不能为空,或一个键值的类型与模式不匹配。它原样不可重试;这个值必须改变。
为什么会发生
消息尾部拼出的典型原因(确切措辞因情况而异):
- 一个键属性中的空字符串或二进制值——非键的字符串和二进制值允许为空;表和索引的键不允许。
- 一个空集合——一个零成员的
SS/NS/BS。集合在任何地方都必须非空;空列表和映射没问题。 - 一个键的类型不匹配(例如
expected: S actual: N)——值的类型与表的键模式不匹配。 - 一个 null 值传给了一个不接受它的属性,或一个 marshaller 为一个
undefined字段发出了null。 - 一个超出其类型范围的值(参见 number overflow)。
如何修复
- 读完整消息。 DynamoDB 会指明出错的参数和确切的规则——那个字符串就是修复方法。
- 给键真实的值——分区键/排序键中绝不用空字符串或空二进制。
- 丢掉空集合——当一个集合没有成员时省略该属性,或改为存储一个标量/
NULL。 - 让类型与模式匹配——把一个数字键作为数字发送、把一个字符串键作为字符串发送;不要弄错包裹。
- 在写入前剥离
undefined/null(文档客户端的removeUndefinedValues选项处理常见情况)。
常见问题
"One or more parameter values were invalid" 是什么意思? 你请求中的一个特定值违反了 DynamoDB 的规则——最常见的是一个键中的空字符串、一个空集合、一个与键模式不匹配的类型,或一个不被允许的 null。完整消息会指明确切的参数和原因。
为什么一个空字符串只是有时失败? DynamoDB 允许非键属性使用空字符串,但在键属性中拒绝它们。分区键或排序键中的一个空字符串会引发 "An AttributeValue may not contain an empty string";同样的值在一个常规属性中会被接受。
相关错误
- Supplied AttributeValue is empty——一个根本没有带类型值的项目属性。
- The provided key element does not match the schema——一个键的类型/形态不匹配。
- ValidationException (overview)
- 学习:DynamoDB data types
参考资料
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- AttributeValue — Amazon DynamoDB API Reference
最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。