Swagger2文档MongoDB ObjectId返回成JSON的问题
如题,项目集成了Swagger2生成文档,但是对于MongoDB的ObjectId类型文档生成了一个JSON格式,而接口实际返回的是一个24位字符串。APP开发人员一看文档,连忙同步ObjectId的类型,结果就是报错。这咋行,必须解决
首先想到了@ApiModelProperty注解的dataType,加上
@ApiModelProperty(value = "消息Id",dataType = "java.lang.String") @Id private ObjectId msgId;// 消息Id
重新生成还是一样的,于是百度参考了《Swagger shows Mongo ObjectId as complex JSON instead of String》,在Swagger2的配置类中加上了类型转换 .directModelSubstitute(ObjectId.class, String.class)
return new Docket(DocumentationType.SWAGGER_2) //将ObjectId转换成string类型 .directModelSubstitute(ObjectId.class, String.class) .enable(true) //是否开启swagger .select() .apis(RequestHandlerSelectors.basePackage("com.shiku.om"))//扫描接口的路径 .paths(PathSelectors.any()) .build() .globalOperationParameters(pars) .apiInfo(apiInfo());
测试一波,还是不行,一看项目重写了Swagger的starter,于是在重写的代码中又加上了上面的类型转换。测试还是GG,看了springfox-swagger2注解依赖的版本2.6.0,再看maven仓库,2.9.2用的最多,于是乎
<!-- swagger注解依赖 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> </exclusions> </dependency>
重启,项目可以了,ObjectId类型都转换成了String
还有一种情况,字段大写也会造成转型失败,会认为是一个对象。
@ApiModelProperty(value = "官群id",dataType = "java.lang.String") @Indexed private ObjectId OfficialGroupId;
生成文档
改成小写就好啦
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步