有人找到了从 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();
热死了!我想到了。我记得您可以访问最低的 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
没有问题