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

在DTO上配置Swagger javax验证约束

公西志文
2023-03-14

我使用的是Swagger(1.5.8),我想让我的swagger.json定义检测DTO上的javax.validationJSR-303注释,这样我就可以记录API的验证约束。

我希望@Min注释(如本例)会显示关于最小值(44)的一些信息,但它不会。

@POST
@ApiOperation(value = "post", httpMethod = "POST")
public Response post(
        @QueryParam("id") @NotNull @Min(44) Integer id) {...}

由此产生的swagger.json是:

"/foo": {
  "post": {
    "operationId": "post",
    ...
    "parameters": [
      {
        "in": "body",
        "name": "id",
        "description": "id",
        "required": false,
        "schema": {
          "type": "integer",
          "format": "int32"
        }
      }

Swagger已经关闭了该功能的拉取请求,但我不清楚它在Swagger定义中的位置/方式。

我希望能够做这样的事情:

@POST
public void postFoo(@Valid @RequestBody FooDTO fooDto) {...}
public class FooDTO {
    @NotNull
    @Size(min = 1, max = 100)
    private Integer myInt;
}
"FooDTO": {
  "type": "object",
  "required": [
    "myInt"
  ],
  "properties": {
    "myInt": {
      "type": "number",
      "format": "integer",
      "minimum": "1",
      "maximum": "100",
 ...

配置Swagger模块/插件以启用ModelResolverBeanValidator等功能的首选方法是什么,以便他们检查我的DTO上的注释?

共有2个答案

房星光
2023-03-14

我浏览了留档。从我的角度来看,在swagger 1. x中,您必须使用@QueryParam验证和@ApiParam,就像在这个测试用例中:

@GET
@Path("/swagger-and-303")
@ApiOperation(value = "Get",
        httpMethod = "GET")
public Response getTestSwaggerAnd303(
        @ApiParam(value = "sample param data", required = false, allowableValues = "range[7, infinity]")
        @QueryParam("id") @NotNull @Min(5) Integer id) throws WebApplicationException {...`

另外,您可以尝试在您的特定情况下使用@ApiIncectParam。

孟英锐
2023-03-14

截至目前,Swagger Core版本1.5.19的最新版本完美地支持这一点:

DTO对象与此类似:

public class SampleDTO {

    @Min(value = 5)
    @Max(value = 10)
    @NotNull
    private Integer integer;

    @NotNull
    private String string;

    //...

}

会让人大摇大摆。json与此类似:

...

 "definitions" : {
    "SampleDTO" : {
      "type" : "object",
      "required" : [ "integer", "string" ],
      "properties" : {
        "integer" : {
          "type" : "integer",
          "format" : "int32",
          "minimum" : 5,
          "maximum" : 10
        },
        "string" : {
          "type" : "string"
        },

...
 类似资料:
  • 我有一个DTO,有几个字段,用户名,密码和电子邮件所有这些字符串。 我也有一个列表,我想作为一个可选的,这意味着它不必从表单中传递,可以留空。 这应该在前端有效: 因此,我们应该: javax中是否有@OptionalField注释之类的内容。验证。限制? 还是我唯一的选择是两个独立的DTO?

  • 问题内容: 我想我丢失了一些东西,因为我在文档中找不到如何编写供Redis实例与sidekiq一起使用的用户名和密码。 有没有办法做到这一点?还是通过ENV变量? 问题答案: Sidekiq将无法识别的redis选项直接传递给Redis驱动程序: Redis没有用户的概念,因此只有密码。

  • 我想让JavaBean验证约束可以通过Spring进行配置,也可以使用属性。例如: 我还没能把这个应用到工作中,或者找到很多关于这个的文档。 这样的事情可能吗?我知道消息在Validationmessages中是可配置的。属性文件,所以我希望约束值也可以有类似的结果。

  • 我正在使用ASP.NET Web API和Code First实体框架,从我所读到的内容来看,您通常应该在操作方法中直接公开DTO对象,而不是实体对象(根据http://www.asp.net/web-api/overview/data/using-web-api-with-entityframework/part-5)。 因此,在我正在处理的一个案例中,为了避免上面链接中描述的“过度发布”问题,

  • 当我在Google play上完成新版本的上传时,我得到了这样的消息:,,,请提供帮助!

  • 到现在为止我们只看了一下基本的验证配置,让给我们看看一些稍微高级点的身份验证配置选项。 内存中的身份验证 我们已经看到了一个单用户配置到内存验证的示例,下面是配置多个用户的例子: @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth