Haskell:如何让OpenApi自动去除字段下划线,避免手写Schema
解决Haskell Data.OpenApi自动生成Schema时字段下划线问题
你可以通过为ToSchema实例指定自定义SchemaOptions,复用和deriveJSON一致的字段名修改逻辑,无需手写完整的Schema定义:
import Data.OpenApi (ToSchema(..), genericDeclareNamedSchema, defaultSchemaOptions) instance ToSchema Disclosed where declareNamedSchema = genericDeclareNamedSchema defaultSchemaOptions { fieldLabelModifier = drop 1 }
这个方法借助genericDeclareNamedSchema基于Generic自动推导Schema,同时通过fieldLabelModifier = drop 1去掉字段名开头的下划线,和你配置deriveJSON的逻辑完全一致——既避免了冗余样板代码,又能让JSON编码与OpenApi Schema的字段名保持统一。
如果有多个类型需要相同的字段名处理规则,可以先定义通用配置项复用:
mySchemaOpts :: SchemaOptions mySchemaOpts = defaultSchemaOptions { fieldLabelModifier = drop 1 } instance ToSchema Disclosed where declareNamedSchema = genericDeclareNamedSchema mySchemaOpts -- 其他需相同规则的类型可直接复用mySchemaOpts
配置完成后,自动生成的OpenApi Schema中,字段名会变为getDisclosed,不再带有下划线前缀。
内容的提问来源于stack exchange,提问作者haroldcarr
相关产品推荐
相关产品推荐

