来自 Java 类的 CDK ApiGateway JsonSchema

问题描述 投票:0回答:1

有人找到了从 CDK 的 Java 类生成 software.amazon.awscdk.services.apigateway.JsonSchema 的方法吗?

如果不必为所有类手动执行此操作,那就太好了。

类似:

import software.amazon.awscdk.services.apigateway.RestApi;
import software.amazon.awscdk.services.apigateway.JsonSchema;
import com.github.victools.jsonschema.generator.SchemaGenerator;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfig;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder;
import my.java.project.domains.models.MyClass;

SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_7, OptionPreset.PLAIN_JSON);
SchemaGeneratorConfig config = configBuilder.with(Option.EXTRA_OPEN_API_FORMAT_VALUES)
    .without(Option.FLATTENED_ENUMS_FROM_TOSTRING)
    .build();
    
SchemaGenerator schemaGenerator = new SchemaGenerator(config);
String schemaString = SchemaBuilder.buildSchema(MyClass.class);

RestApi myRestApi = RestApi.Builder.create(this, "MyRestApi")
    .restApiName("myRestApi")
    .deployOptions(StageOptions.builder()
                    .stageName("v1")
                    .tracingEnabled(true)
                    .build())
    .build();

IModel myRequestModel = Model.Builder.create(this, "MyRequestModel")
    .restApi(myRestApi)
    .contentType("application/json")
    .description("Reset password request model")
    .schema(JsonSchema.builder().fromString(schemaString)) <--------------
    .build();
java amazon-web-services aws-cdk
1个回答
0
投票

热死了!我想到了。我记得您可以访问最低的 CloudFormation 构造。

所以就是这样。 第 1 步:从模型生成架构

SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_7, OptionPreset.PLAIN_JSON);
SchemaGeneratorConfig config = configBuilder.with(Option.EXTRA_OPEN_API_FORMAT_VALUES)
    .without(Option.FLATTENED_ENUMS_FROM_TOSTRING)
    .build();
SchemaGenerator schemaGenerator = new SchemaGenerator(config);
var schema = schemaGenerator.generateSchema(MyClass.class);

第 2 步:从架构对象创建 CfnModel 类

CfnModel cfnModel = CfnModel.Builder.create(this, "MyRequestModel")
    .restApiId(myRestApi.getRestApiId())
    .contentType("application/json")
    .description("My Request Model")
    .name("MyRequestModel")
    .schema(schema)
    .build();

第 3 步:将模型附加到方法时使用

Model.fromModelName

publicRestApi.getRoot()
    .resourceForPath("/my/path")
    .addMethod(HttpMethod.POST.toString(), ...,
        MethodOptions.builder()
            ...
            .requestModels(Map.of("application/json", Model.fromModelName(this, "MyRequestModel", cfnModel.getName())))
            ...

我还没有运行过

cdk deploy
,但它运行了
cdk synth
没有问题

© www.soinside.com 2019 - 2024. All rights reserved.