Java根据yaml生成表单_如何用Openapi生成器从Swagger-yaml生成SpringBoot模型

本文讨论在API优先的方法中,如何利用Openapi生成器从Swagger YAML文件创建SpringBoot模型。遇到的问题是生成的模型缺少XML相关的注解,导致无法解析XML和保存到数据库。作者寻求在不手动修改代码的情况下,当YAML定义变更时,能自动更新模型并添加必要的注解,如`@Id`和`@Xml...`。提出了尝试扩展自动生成的模型类以及寻找自动化处理XML映射的解决方案。
摘要由CSDN通过智能技术生成

我们使用的是API优先的方法,我们服务的API在swagger yaml中定义。然后我们使用Openapi生成器生成必须由微服务实现的接口。此外,模型是根据模式生成的。

这就是问题所在。在一个REST端点中,我使用一个XML,让它被Spring boot解析成一个模型,然后保存到数据库中。目前我使用的模型如下:

@Data

@XmlRootElement

@XmlAccessorType(XmlAccessType.FIELD)

@Document("MyModel")

public class Model {

@Id

@XmlTransient

private String id;

@XmlAttribute

private String someAttribute;

@XmlElement("childName")

private List children;

@XmlElement("otherChildName")

private List children2;

}

其他型号都很相似。我喜欢这个,因为Spring boot可以使用它来自动解析传入的XML,我可以将这个模型直接保存到数据库中,并将其作为JSON返回。

Openapi生成器生成的模型缺少注释,因此无法用于解析XML,也无法保存到数据库中。山药里有没有办法让它加上

@Id

@Document

还有一些

@Xml...

注解?

我尝试这样做的主要原因(使用自动生成的模型表单招摇过市)是因为这是一个更大的体系结构,如果有人更改yaml中的API定义,例如添加字段,那么microservice也将再次构建,并且模型将在不手动更新java类的情况下更新。我考虑的另一种方法是像Openapi那样生成模型,然后用自己的类扩展它们,然后以某种方式添加注释,。。。但我想不出任何方法来实现这一点,这样,如果定义中的字段发生更改,就不必更改派生类。

例子:

//class generated by openapigenerator

public class Model {

private String field;

private List children

//autogenerated getters/setters

}

//model in my code

@XmlRootElement

@XmlAccessorType(XmlAccessType.FIELD)

@Document("MyModel")

public class MyModel extends Model {

@Id

@XmlTransient

@Getter

@Setter

private String id;

}

@Xml。。。

@JsonProperty("somename")

在json命名的情况下,名称很好,但它似乎使用了

XML: name/attribute

yaml中的属性对生成的java代码没有任何影响(或者我做错了什么,请尝试:

Documentation

)

我唯一能想到的就是

@Override

-使用getter/setter并用属性注释它们,但这意味着我必须接触每个使用API定义的模型派生的微服务。我无法将派生类移到API项目中,因为上下文(在本例中是XML/mongo)可能因微服务而异。

有什么好办法吗?

-----编辑------

在深入研究之后,我更加确信可能正确的方法是添加XML映射(

@XmlAttribute

@XmlElement

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值