我一直在测试swagger,以便将它用作我的api服务的事实文档。 我使用hibernate作为持久层,每个响应都绑定到一个实体。 问题是这些实体与其他实体有依赖关系,我想在@ApiOperation响应中传递对象时编排swagger以不显示这些实体。 我能在网上找到的唯一想法就是这个link from the github页面。
我试过这样做:
String emptyJSON = "{}";
OverrideConverter addressConverter = new OverrideConverter();
addressConverter.add(User.class.getCanonicalName(), emptyJSON);
ModelConverters.addConverter(addressConverter, true);
但是我收到了这个错误:
org.json4s.package $ MappingException:找不到可以转换成java.lang.String的值
当我发现某些类作为字段或列表时,有没有办法避免序列化某些类?如何?
答案 0 :(得分:1)
好的,好像你可以使用
OverrideConverter sessionConverter = new OverrideConverter();
sessionConverter.add(Session.class.getName(), emptyJSON);
ModelConverters.addConverter(sessionConverter, true);
全局避免序列化。 此外,如果你需要避免内部对象序列化,那么只需将所有的getter方法更改为其他东西,看起来swagger正在使用这个getter而不是我认为很糟糕的反射。 希望有所帮助
答案 1 :(得分:0)
我有一个类似的问题,但我不想 JsonIgnore 我的大实体上的所有内部实体和值,因为有时我确实想序列化整个对象,但是如果我的实体用于 json 响应,我有我自己的注释只序列化 id。
例如我的实体是:
class Entity {
Integer id;
SubEntity1 subEntity1;
SubEntity2 subEntity2;
List<SubEntity3> subEntity3s;
...
}
如果我在响应 Dto 中返回一个实体,我可以选择对该实体对象进行注释以仅序列化 id,这有助于清除响应中的大量混乱。
例如响应Dto是:
class ResponseDto {
@JsonSerialize(using = EntityIdSerializer.class)
Entity entity;
...
}
因此,如果我输入 dto,例如 Postman,则响应如下所示:
{
entity: { id: 1},
...
}
我的问题是 swagger 无法识别这一点,因此文档序列化了整个实体,这看起来很难看。在我的实际情况下,我正在序列化的实体可能超过 300 行 json。
如何使用相同的 @JsonSerialize 功能配置 swagger?