我想在@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
}
答案 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) {
//..
}
}
一些有用的链接