java - Springfox swagger 在某些模型上没有正确显示替代类型映射
问题描述
我有一堆实体在许多forms
, list
, map
,multimap
等的控制器中返回...
我有一个解决方案,您可以定义类型映射(entity -> dto, dto -> entity)
,其中实体是实际JPA
实体,并且 a用一堆注释和东西DTO
表示实体的形式。JSON
swagger
我jackson
从这些映射中创建了 2 个模块,基本上有很多StdDelegatingDeserializer
和StdDelegatingSerializer
. 然后将此模块添加到jackson
中,它们可以正常工作。
当控制器返回一个实体类型时,实际JSON
是从 DTO 创建的,当您希望在控制器中接收一个实体时也是如此。
在这个应用程序中,还swagger
设置了一个带有 UI 的招摇,并且在swagger
配置中,我将所有这些映射添加为替代类型映射。swagger 文档中的大多数模型都很好,但在某些情况下,文档显示实体的结构而不是DTO
.
我将映射存储在以下类的列表中
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ModelMapperKey<E, D> {
@NonNull
private Class<E> entityType;
@NonNull
private Class<D> dtoType;
}
从这个列表中,我创建了一个AlternateTypeRuleConvention
bean 并swagger
自动处理它
@Bean
public AlternateTypeRuleConvention alternateTypeRuleConvention() {
return new AlternateTypeRuleConvention() {
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
@Override
public List<AlternateTypeRule> rules() {
return modelMapperService.getMapperKeys()
.stream()
.map(key -> newRule(resolver.resolve(key.getEntityType()), resolver.resolve(key.getDtoType())))
.collect(Collectors.toList());
}
};
}
正如我所提到的,它工作得很好,并DTO
在swagger
文档中显示了实际情况,预计某些情况下不会。目前,60 次中有 11 次显示的是实体而不是DTO
模型。我检查了很多次,为那些DTO
-s 创建了替代类型规则并添加到上下文中。当您执行请求时,swagger UI
我会得到正确的json
响应。
我试图玩规则优先
newRule(resolver.resolve(key.getEntityType()), resolver.resolve(key.getDtoType()), Ordered.HIGHEST_PRECEDENCE)
也尝试过0
,Ordered.LOWEST_PRECEDENCE
但没有一个有效。我不知道是什么导致了这种现象。
解决方案
推荐阅读
- matlab - 即使我知道有答案,不回答也能解决等式
- python - 如何将终端输出作为日志写入 .txt 文件
- python - 将 nan 值水平填充到数据框中
- flutter - 如何在颤动中仅在 SliverAppBar 的灵活空间中给出底部边框半径?
- python - 双击通过bash脚本在控制台中执行python脚本
- reactjs - 单击关闭应用程序时出现 nextjs 上的未知错误
- javascript - 在 JSON 数组中获取最大值
- php - 如何在 Laravel 中制作正确的 sortBy 数组?
- node.js - Node.js oracledb 模块——类型错误:无法读取未定义的属性“关闭”
- facebook - Facebook Graph API - 页面视频 - 发生未知错误