我有以下内容:
@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>
我在做什么错了?
答案 0 :(得分:2)
Swagger批注不对输入执行任何服务器端验证-它们仅用于生成swagger文档。然后,您必须以某种方式从生成的Swagger文档创建用户界面(例如,如果使用Spring Boot https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui,则使用Springfox swagger-ui)。最后,如果用户界面生成正确,则用户界面将执行验证。
由于在示例中您是使用Curl发送请求的,所以swagger注释不起作用(因为您没有通过Swagger UI发送请求),因此可以发送空值。为了执行服务器端验证,您必须使用其他注释。