Spring Rest在@RequestBody中添加@NotEmpty而不创建请求POJO

时间:2017-05-17 04:03:51

标签: java spring validation httprequest

我想在@NotEmpty中添加@RequestBody,但我不想仅为请求创建额外的POJO,我该怎么做?

我想要执行以下操作,但是当我将201 Created放入请求正文时,它仍会返回[]状态代码,这意味着@NotEmpty实际上无效。

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@Valid @NotEmpty @RequestBody Set<String> request) {
      .....
}

不想做这样的事情,但@NotEmpty适用于这种情况:

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@Valid @NotEmpty @RequestBody SampleRequest request) {
      .....
}

SampleRequest类

public class SampleRequest {

    @NotEmpty
    private Set<String> name;

     ..Setter and Getter
}

3 个答案:

答案 0 :(得分:1)

您还需要使用 @Validated https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/validation/annotation/Validated.html)注释控制器,方法或参数,以触发验证

答案 1 :(得分:0)

我要做的第一件事就是检查你的类路径上是否有验证实现。 @NotEmpty注释来自一个单独的jar(validation-api.jar),因此,当您的代码编译时,验证不会在运行时强制执行。您应该看到名为hibernate-validator.jar

的依赖项

如果失败,您可以尝试将其替换为@Size(min=1)

答案 2 :(得分:0)

由于您不验证DTO等复杂的Java对象,因此可以在方法参数上添加约束(验证注释)。

您只需要做两件事

方法参数前的一乘约束(变量)注释

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody @NotEmpty SampleRequest request) {
      .....
}

2-Put @Validated on the class

@Validated
public class testController{

 //..

}

最后,我们有

@Validated
public class testController{

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody @NotEmpty SampleRequest request) {
      //..
   }

}

一些有用的链接

Spring REST Validation Example

All You Need To Know About Bean Validation With Spring Boot