当前位置: 首页 > 知识库问答 >
问题:

如何隐藏删除额外的请求体参数在Swagger与Springfox

宋望
2023-03-14

我有一个非常大的用户,有许多字段,如下所示:

public class UserDto implements Serializable {
    private Long id;
    @Column
    private String username;
    @Column
    private String emailId;
    @Column
    private String password;

    .... many other columns like above with getter/setter
}

我定义了如下验证方法:

    @RequestMapping(value = "authenticate", consumes = "application/json", produces = "application/json", method = RequestMethod.POST)
        @ApiOperation(value="authenticate user",notes="authenticate user for all roles")
        @ApiResponses( {
            @ApiResponse( code = 403, message = "BAD_CREDENCIAL_EXCEPTION",response=ExceptionMsgDto.class),
            @ApiResponse( code = 404, message = "USERNAME_NOT_FOUND_EXCEPTION",response=ExceptionMsgDto.class)
        } )
        public ResponseEntity<Object> authenticate(@RequestBody UserDto userDto, HttpServletRequest request)
                throws Exception {
  /* business logic */
}

当我生成swagger时,它会在请求模型中显示Userdto的所有属性,但我只想显示用户名/密码,并想隐藏其他属性。但是在createUser方法的同一点上,我想显示UserDto的所有属性。

我试图找到解决方案,但没有得到任何,这可能吗?请建议我一些方法来实现这一点。

提前谢谢。

共有1个答案

艾凌龙
2023-03-14

在您的情况下,应该更好地使用特定于请求的DTO,例如InsertUserDTO、UpdateUserDTO等。。显然,除了简单的gette/setter之外,不应该包含任何方法。

在我的例子中,我所做的是因为我不想在我的域对象上添加另一个抽象层(我在控制器方法中传递这些抽象层),我只是想隐藏特定请求类型上的属性,这样它们就不会在Swagger上显示(2.6.1版本)。

以下是我所做的:

我的域对象:

public class Entity {
   private String name;
   private String hideThis;

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

   public String getHideThis() { return hideThis; }
   public void setHideThis(String hideThis) { this.hideThis= hideThis; }
}

我注释了所有我想隐藏的属性!即使与私有属性一起工作:)

import io.swagger.annotations.ApiModelProperty;
public class EntityInsertRequest extends Entity {    

   @ApiModelProperty(hidden = true)
   private User hideThis;

}

这样,我就可以在昂首阔步的ui中控制请求体的外观。它可以是不同的插入/更新/删除。当然,这并不能阻止用户发送仍然会被序列化的东西!api的留档是干净的,没有额外的DTO层,假设你被保护免受传递到后端的随机值/对象的影响。

以下是我之前的控制器方法:

@RequestMapping(value = "entity", method = RequestMethod.POST)
public Entity storeEntity(@RequestBody final Entity in) {

    return entityService.store(in);
}

以下是我的控制器方法:

@RequestMapping(value = "entity", method = RequestMethod.POST)
public Entity storeEntity(@RequestBody final EntityInsertRequest in) {

   return entityService.store(in);
}
 类似资料:
  • 我有一个类用户 我的控制器 它大摇大摆地显示

  • 问题内容: 我有一些服务器端HTML输出,我无法使用纯CSS来处理,本质上DIV有时适用: 要么 要么 要么 当DIV == 我要删除它。 有任何想法吗? 问题答案: 甚至更好(假设使用jQuery): 编辑:其他答案是好的,但OP想要删除空项目,而不是将其隐藏。

  • 我使用guzzle作为http客户端来测试我的symfony api。 有一个url选项在留档,但我如何通过userid 当我用curl测试的时候 curl-i-X删除http://localhost/us/serenify/web/app_dev.php/userapi/delete/1/6 我的api运行良好,显示了适当的响应。 但是我不能用guzzle测试它,因为我找不到传递参数的选项。

  • 隐藏CardView时如何删除空间?我用android和Firebase做了一个应用程序,我在cardviews中显示Firebase的信息,但当信息不正确时,cardview必须消失。重点是cardview消失了,但仍然在布局中使用了空格,我已经在 setVisibility(GONE)视图变得不可见,但仍然占用空间,但对我来说不起作用。 这是我的布局: 这是mview: 我希望你能帮助我。

  • 如何隐藏自己的请求域名,我想隐藏自己的请求域名,有什么现成的好用的产品吗?做反向代理的,不需求自己搭建,或很小精力搭建的。 我自己用的cloudflare的域名的cname解析过去,但是会出现跨域问题,不知道怎么解决了