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

Springfox Java Bean Validations 未在 Swagger Output 中显示

呼延凌
2023-03-14

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@EnableSwagger2
@Import({springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration.class})
@Configuration
public class SwaggerConfig {
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("My API")
                .build();
    }
}

这是我的请求映射:

@ApiOperation(value = "Use to get token for internal applications")
@PostMapping(value = AuthUris.TOKEN)
public AuthResponse token(@Valid @RequestBody AuthRequest authRequest) {
// implementation omitted
}

这是我的POJO:

@ApiModel
public class AuthRequest {
    @ApiModelProperty
    @NotNull
    @Size(min = 4, max = 50)
    private String username;
    @NotNull
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

我期望在Swagger UI中捕获NotNull和Size注释,但是它们没有。请帮助我理解这应该如何工作。谢谢你。

共有1个答案

郤瀚
2023-03-14

>

  • 如果您使用的是 springfox 2.7.0 版,则@NotNull@Size注释都应该有效。

    您的< code>@NotNull批注已经在< code >密码字段中起作用。

    如果字段存在@ApiModelProperty注释,则该注释优先于@NotNull用户名字段就是这种情况。它显示为可选,因为@ApiModelProperty注释的必需属性默认设置为false

    例如,如果输入的用户名小于最小大小4,则会出现以下异常

    {
      "timestamp": 1511550365198,
      "status": 400,
      "error": "Bad Request",
      "exception": "org.springframework.web.bind.MethodArgumentNotValidException",
      "errors": [
        {
          "codes": [
            "Size.authRequest.username",
            "Size.username",
            "Size.java.lang.String",
            "Size"
          ],
          "arguments": [
            {
              "codes": [
                "authRequest.username",
                "username"
              ],
              "arguments": null,
              "defaultMessage": "username",
              "code": "username"
            },
            50,
            4
          ],
          "defaultMessage": "size must be between 4 and 50",
          "objectName": "authRequest",
          "field": "username",
          "rejectedValue": "s",
          "bindingFailure": false,
          "code": "Size"
        }
      ],
      "message": "Validation failed for object='authRequest'. Error count: 1",
      "path": "/tokens"
    }
    

  •  类似资料:
    • 我在StackOverflow上看到了一些类似的事件。然而,这些似乎都不适用于我的情况。我遇到的问题是,我的RecyclerView正在工作,但没有显示任何内容。我已经运行了多个测试,试图找出它不工作的原因,但所有测试都支持它正常工作的事实。 getItemCount中的日志返回3,这是正确的数字。我只是不明白为什么它没有显示。我回头看了我在以前的活动中做的回收器视图,它们都在一定程度上匹配(其他

    • 我知道同样的问题已经被问过很多次了,但是我似乎真的没有在我的代码中发现阻碍JPanel类型的对象显示在JFrame中的错误。下面是扩展JFrame的类的构造函数: 当我运行main方法(这里没有显示)时,它只显示框架和按钮。如果有人能在这方面给点提示,我会非常感谢的。

    • 问题内容: 我有这些方法可以在MKMapView之间添加路由。我都有有效的pickUpDistanceLocation和dropOffDistanceLocation 这是在地图中添加路线叠加层的方法 我收到此错误,因为响应返回错误:400 打印错误时显示为 可选(“操作无法完成。(NSURLErrorDomain错误-1011。)”) 问题答案: 实际上,源变量和目标变量都为nil。因此,我从s

    • 问题内容: 我有一个图标图标,该图标在Chrome中没有显示(我不确定其他浏览器,因为我只使用Chrome),但是奇怪的是,如果我在显示的URL栏中键入图标的路径! 为什么没有出现图标? 问题答案: 快取 清除缓存。并测试其他浏览器。 有些可以通过添加URL参数来获取更新的图标的链接:在链接href之后,它更改了资源链接,因此无需缓存即可加载图标(感谢@Stanislav)。 网站图示用法 您是如

    • 首先,我对Liferay非常陌生,即使在阅读了这些文档之后,我可能也不知道自己在做什么。 我正在尝试在Liferay portlet中设置一个自定义jsp页面。我的jsp结构如下: 这些都放在我的portlet视图中。然而,我在我的portlet中看不到任何显示。我的所有源代码和映射都是正确的,但似乎我只能在portlet中显示常规文本。 我正在使用Liferay插件SDK和Eclipse的最新版

    • 每当我试图通过将鼠标悬停在对Eclipse中任何类的引用来访问Javadoc时,它要么说时发生了异常,要么说中找不到Javadoc。我已经阅读了StackOverflow上的几个解决方案,并尝试了它们,包括: 安装JDK并将其作为库添加到我的项目中 验证rt.jar中Javadoc的源是正确的URL。当我点击上面的时,它甚至会说这个位置可能是有效的 奇怪的是,如果我点击浏览器中的查看Javadoc

    • 问题内容: 我无法使LibGDX日志记录在Android Studio中工作。首先,我认为我的问题与之前的问题相同,但是请确保我的应用程序在调试时进行了更新。 选项按钮上的测试操作已执行,但我无法显示调试日志。 问题答案: 默认日志级别为。为了进行调用,您必须先调用一次(可能是Game构造函数的第一行,以便可以轻松更改它)。

    • 问题内容: 我没有提交就做了一些查询。然后应用程序被停止。 如何显示这些未清交易并提交或取消交易? 问题答案: 如何显示这些未清交易并提交或取消交易? 没有打开的事务,MySQL将在断开连接时回滚该事务。 您无法提交交易(IFAIK)。 您使用显示线程 参见:http : //dev.mysql.com/doc/refman/5.1/en/thread- information.html 这将无济