1

我一直在测试 swagger,以便将其用作我的 api 服务的事实上的文档。我将休眠用于持久层,每个响应都绑定到一个实体。问题是这些实体与其他实体有依赖关系,当我在@ApiOperation 响应中传递对象时,我想安排大摇大摆地不显示这些实体。我能在网上找到的唯一想法是来自 github页面的这个链接。

我试过这样做:

String emptyJSON = "{}";
OverrideConverter addressConverter = new OverrideConverter();
addressConverter.add(User.class.getCanonicalName(), emptyJSON);
ModelConverters.addConverter(addressConverter, true);

但我收到此错误:

org.json4s.package$MappingException: 没有找到可以转换成 java.lang.String 的值

当我将某些类作为字段或列表找到时,有没有办法避免序列化它们以及如何?

4

2 回答 2

1

好的,看来您可以使用

 OverrideConverter sessionConverter = new OverrideConverter();
 sessionConverter.add(Session.class.getName(), emptyJSON);
 ModelConverters.addConverter(sessionConverter, true);

用于全局避免序列化。此外,如果您需要避免内部对象序列化,那么只需将所有 getter 方法更改为其他方法,似乎 swagger 正在使用这个 getter 而不是反射,这在我看来很糟糕。希望有帮助

于 2013-09-19T11:04:28.087 回答
0

我有一个类似的问题,但我不想 JsonIgnore 我的大实体上的所有内部实体和值,因为有时我确实想序列化整个对象,但是如果我的实体用于 json 响应,我有自己的注释仅序列化 id。

例如我的实体是:

class Entity {
     Integer id;
     SubEntity1 subEntity1;
     SubEntity2 subEntity2;
     List<SubEntity3> subEntity3s;
     ...
}

如果我在响应 Dto 中返回一个实体,我可以选择注释该实体对象以仅序列化 id,这有助于清除响应中的许多混乱。

例如 ResponseDto 是:

class ResponseDto {
    @JsonSerialize(using = EntityIdSerializer.class)
    Entity entity;
    ...
}

因此,如果我将 dto 放入 Postman 中,则响应如下所示:

{
    entity: { id: 1},
    ...
}

我的问题是 swagger 无法识别这一点,因此文档序列化了整个实体,看起来很难看。在我的实际情况下,我正在序列化的实体可以是 300 多行 json。

如何使用相同的 @JsonSerialize 功能配置 swagger?

于 2021-08-04T22:44:14.750 回答