OCI Java SDK创建Secret报stage必须为CURRENT的400参数错误如何解决
OCI Java SDK创建Secret报stage参数错误的解决方案
错误根因
你遇到的400参数校验错误是两个常见问题共同导致的:
- 创建全新Secret时,初始版本的
stage参数不允许手动赋值,系统会自动标记初始版本为CURRENT,主动传任何枚举值都会触发校验拦截 - 2.8.0及更早版本的OCI Java SDK存在枚举序列化bug,会把
Stage枚举的大写值序列化为小写字符串,和后端要求的大写格式不匹配,就算传了正确的Current枚举也会被判定为无效值
修复步骤
- 第一步:删除构造
SecretContentDetails对象时所有和stage参数相关的配置,去掉.stage(xxx)的代码调用 - 第二步:确认
CreateSecretDetails的必填参数配置完整:必须包含vaultId、compartmentId、keyId(加密用主密钥的OCID),secret内容使用Base64SecretContentDetails构造,仅传入Base64编码后的内容即可 - 第三步:如果需要后续更新Secret版本,再在更新接口中指定
stage参数,创建接口无需配置该字段
正确代码示例
import java.nio.charset.StandardCharsets; import java.util.Base64; import com.oracle.bmc.vault.model.Base64SecretContentDetails; import com.oracle.bmc.vault.model.CreateSecretDetails; import com.oracle.bmc.vault.requests.CreateSecretRequest; // 构造Secret内容 Base64SecretContentDetails contentDetails = Base64SecretContentDetails.builder() .content(Base64.getEncoder().encodeToString("你的明文机密内容".getBytes(StandardCharsets.UTF_8))) // 不要添加.stage()配置 .build(); // 构造创建请求参数 CreateSecretDetails createSecretDetails = CreateSecretDetails.builder() .compartmentId("你的资源分区OCID") .vaultId("你的Vault实例OCID") .keyId("你的加密主密钥OCID") .secretName("自定义的Secret名称") .secretContent(contentDetails) .build(); // 发起创建请求 vaultsClient.createSecret(CreateSecretRequest.builder() .createSecretDetails(createSecretDetails) .build());
内容的提问来源于stack exchange,提问作者Arjun
相关产品推荐
相关产品推荐

