Swagger可以覆盖自定义对象序列化

时间:2013-09-07 20:13:52

标签: java-ee swagger

我一直在测试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的值

当我发现某些类作为字段或列表时,有没有办法避免序列化某些类?如何?

2 个答案:

答案 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?