当传递null时,Swagger @ApiParam要求不起作用

时间:2019-01-02 23:33:43

标签: java jackson swagger

我有以下内容:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/some/path")
void createSomething(@ApiParam(required = true) @Valid final User user);

User就像

class User {
    @Valid
    @NotNull
    @NotBlank
    final String name;

    ...
}

如果我做curl -X POST -H "Content-Type: application/json" /some/path -d '{"foo":"bar"}',我确实会得到400。

但是,如果我不发送任何东西,那么我不会得到400,即curl -X POST -H "Content-Type: application/json" /some/path不会得到400(后来的结果是500,因为对象user现在为空。 / p>

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

Swagger批注不对输入执行任何服务器端验证-它们仅用于生成swagger文档。然后,您必须以某种方式从生成的Swagger文档创建用户界面(例如,如果使用Spring Boot https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui,则使用Springfox swagger-ui)。最后,如果用户界面生成正确,则用户界面将执行验证。

由于在示例中您是使用Curl发送请求的,所以swagger注释不起作用(因为您没有通过Swagger UI发送请求),因此可以发送空值。为了执行服务器端验证,您必须使用其他注释。