Java springrest在@RequestBody中添加@NotEmpty而不创建请求POJO
我想在Java springrest在@RequestBody中添加@NotEmpty而不创建请求POJO,java,spring,validation,httprequest,Java,Spring,Validation,Httprequest,我想在@RequestBody中添加@NotEmpty,但我不想仅为请求创建额外的POJO,我如何才能做到这一点 我想这样做,但当我将[]放入请求体时,它仍然返回我创建的201状态代码,这意味着@NotEmpty实际上不起作用 @PostMapping @ResponseStatus(HttpStatus.CREATED) public void create(@Valid @NotEmpty @RequestBody Set<String> request) { ...
@RequestBody
中添加@NotEmpty
,但我不想仅为请求创建额外的POJO,我如何才能做到这一点
我想这样做,但当我将[]
放入请求体时,它仍然返回我创建的201状态代码,这意味着@NotEmpty
实际上不起作用
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@Valid @NotEmpty @RequestBody Set<String> request) {
.....
}
采样器等级
public class SampleRequest {
@NotEmpty
private Set<String> name;
..Setter and Getter
}
公共类采样器请求{
@空空如也
私有集合名;
…接二连三
}
我要做的第一件事是检查类路径上是否有验证实现。@NotEmpty注释来自一个单独的jar(validation api.jar
),因此,在代码编译时,可能不会在运行时强制执行验证。您应该看到一个名为hibernate validator.jar的依赖项
如果做不到这一点,您可以尝试将其替换为@Size(min=1)
您还需要使用@Validated()注释控制器、方法或参数,以便触发验证因为您不验证DTO之类的复杂Java对象,所以您可以对方法参数施加约束(验证注释)
你只需要做两件事
方法参数前的1-put约束(valiadition)注释
2-Put@已在类上验证
最后,我们有
一些有用的链接
当我将设置请求
放在POJO中,并用@NotEmpty
对其进行注释时,它会工作并提示我错误,但当我将其放在@RequestBody
前面时,它不会工作,因此,我可以假设@NotEmpty
实际上没有问题?听起来spring忽略了控制器方法参数上的验证约束注释。我怀疑需要pojo。我还在控制器方法参数中尝试了@Size(min=1)
,它也不起作用。你能发布完整的源代码或链接吗?@noelob你知道Spring为什么忽略控制器验证约束吗。
public class SampleRequest {
@NotEmpty
private Set<String> name;
..Setter and Getter
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody @NotEmpty SampleRequest request) {
.....
}
@Validated
public class testController{
//..
}
@Validated
public class testController{
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody @NotEmpty SampleRequest request) {
//..
}
}