Templates YAML中的感叹号(YAML标记),在使用jackson YamlApper进行反序列化和重新序列化时导致奇怪行为
我尝试使用Jackson YamlApper对以下YAML内容进行反序列化和重新序列化。但是,标签!缺少ImportValue。请告诉我如何保留YAML标签!导入值 原始内容:Templates YAML中的感叹号(YAML标记),在使用jackson YamlApper进行反序列化和重新序列化时导致奇怪行为,templates,jackson,yaml,amazon-cloudformation,Templates,Jackson,Yaml,Amazon Cloudformation,我尝试使用Jackson YamlApper对以下YAML内容进行反序列化和重新序列化。但是,标签!缺少ImportValue。请告诉我如何保留YAML标签!导入值 原始内容: AWSTemplateFormatVersion: 2010-09-09 Resources: S3Bucket: Type: AWS::S3::Bucket Properties: BucketEncryption: ServerSideEncryptionConfigu
AWSTemplateFormatVersion: 2010-09-09
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
KMSMasterKeyID: !ImportValue DefaultCustomerMasterKeyForThisRegionArn
SSEAlgorithm: aws:kms
BucketName: blahblah.com
AWSTemplateFormatVersion: 2010-09-09
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
KMSMasterKeyID: DefaultCustomerMasterKeyForThisRegionArn
SSEAlgorithm: aws:kms
BucketName: blahblah.com
反序列化和重新序列化后:
AWSTemplateFormatVersion: 2010-09-09
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
KMSMasterKeyID: !ImportValue DefaultCustomerMasterKeyForThisRegionArn
SSEAlgorithm: aws:kms
BucketName: blahblah.com
AWSTemplateFormatVersion: 2010-09-09
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
KMSMasterKeyID: DefaultCustomerMasterKeyForThisRegionArn
SSEAlgorithm: aws:kms
BucketName: blahblah.com
通常,在YAML加载过程中,一旦将数据加载到本机类型中,标记就会被删除。请参见规范中的此图: 这意味着,如果要保留标记,应在映射到本机数据类型之前停止加载。大多数YAML实现都为此提供了API。Jackson使用SnakeYAML,它确实提供了这个API,但Jackson没有公开它。这意味着您需要直接使用SnakeYAML来实现这一点 你是这样做的:
StreamReader sr=/*您想要加载的任何内容*/;
分解器分解器=新分解器();
Composer-Composer=new-Composer(new-ParserImpl(sr),解析器);
Node root=composer.getSingleNode();
如果要再次写出YAML,请执行以下操作:
DumperOptions do=新的DumperOptions();
Serializer Serializer=新序列化程序(新发射器(输出,do),解析程序,do,null);
Writer w=/*你想写的地方*/;
serializer.serialize(根);
请注意,如果要更改任何内容,现在需要使用
节点
子类遍历数据。引用要保留的值。很抱歉,我无法引用它,因为它不是普通字符串。这是YAML标记。Jackson不支持YAML标记。好的,谢谢你让我知道。