从招摇响应中排除模型或属性 [英] Exclude Models or properties from swagger response

查看:28
本文介绍了从招摇响应中排除模型或属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的 apache cxf 项目中使用了 swagger,使用了 @Api 和 @ApiOperations 以及 @ApiParam 注释,并为其余服务生成了一个 api 文档.

I used swagger in my apache cxf project , used @Api and @ApiOperations and @ApiParam annotations and generated a api doc for the rest services.

但我想从模型属性或完整模块或属性属性中排除一些字段,如 EntityTag、StatusType 和 MediaType 等.

But I want to exclude some of the fields like EntityTag, StatusType and MediaType etc from Models attribute or complete modules or properties attribute.

怎么做?

我正在从 db 获取数据并将其设置为用户对象并将该用户对象传递给 JAX-RS 响应构建器.

I was fetching data from db and setting it to user object and passing that user object to JAX-RS response builder.

以下是我的 DTO 对象之一:

Below is one of my DTO Object:

  @ApiModel
  public class User{
  private String name;
   private String email;


 @ApiModelProperty(position = 1, required = true, notes = "used to display user name")
 public int getName() {
    return name;
 }

 public void setName(String name) {
    this.name= name;
}

@ApiModelProperty(position = 2, required = true, notes = "used to display user email")
public int getEmail() {
    return email;
}

 public void setEmail(String email) {
    this.email= email;
 }

现在我没有看到 Swagger 返回的 json 格式中的用户对象字段或属性.

Now I don't see the User object fields or properties inside the Swagger returned json format.

我的服务类方法响应是:

my service class method response is :

    @GET
    @ApiOperation(value = "xxx", httpMethod = "GET", notes = "user details", response =  Response.class)
   public Response getUserInfo(){
        User userdto = userdaoimpl.getUserDetails();
        ResponseBuilder builder = Response.ok(user, Status.OK), MediaType.APPLICATION_JSON);
        builder.build();
 }


<bean id="swaggerConfig" class="com.wordnik.swagger.jaxrs.config.BeanConfig">
    <property name="resourcePackage" value="com.services.impl" />
    <property name="version" value="1.0.0" />
    <property name="basePath" value="http://localhost:8080/api" />
    <property name="license" value="Apache 2.0 License" />
    <property name="licenseUrl"
        value="http://www.apache.org/licenses/LICENSE-2.0.html" />
    <property name="scan" value="true" />
 </bean>

推荐答案

首先,您应该升级到最新的 swagger-core 版本,目前是 1.3.12(您使用的是非常旧的版本).

First of all, you should upgrade to the latest swagger-core version, currently 1.3.12 (you're using a really old one).

您有 3 种隐藏属性的方法:

You have 3 ways to hide a property:

  1. 如果您使用 JAXB 注释,则可以使用 @XmlTransient.
  2. 如果您使用的是 Jackson,则可以使用 @JsonIgnore.
  3. 如果您不使用任何一种,或者不想影响模型的一般反序列化/序列化,可以使用 Swagger 的 @ApiModelPropertyhidden 属性.

请记住,您可能需要在 getter/setter 上而不是在属性本身上设置这些.试一试这些定义,看看哪些对你有用.

Keep in mind you may need to set these on your getters/setters rather than on the property itself. Play with the definitions to see what works for you.

关于 User 模型的问题,问题在于您没有从 @ApiOperation 引用它(您也不需要 httpMethod 属性).尝试如下更改:

With regards to the issue with the User model, the problem is that you do not reference it from the @ApiOperation (you also don't need the httpMethod property). Try changing it as follows:

@ApiOperation(value = "xxx", notes = "user details", response =  User.class)

这篇关于从招摇响应中排除模型或属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆