javaxbean验证对方法参数无效
javax验证在方法参数上不起作用。。这是一个测试代码,没有一个javax验证对方法参数有效javaxbean验证对方法参数无效,java,spring,spring-boot,bean-validation,hibernate-validator,Java,Spring,Spring Boot,Bean Validation,Hibernate Validator,javax验证在方法参数上不起作用。。这是一个测试代码,没有一个javax验证对方法参数有效 @RequestMapping(value = "/{id}", method = RequestMethod.PUT, params = "action=testAction") public Test update( @Size(min = 1) @RequestBody List<String> ids, @Min(3) @PathVariable St
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, params = "action=testAction")
public Test update(
@Size(min = 1) @RequestBody List<String> ids,
@Min(3) @PathVariable String name) {
return doSomething(ids, name);
}
及
--解决方案--
按照接受的答案执行所有步骤。
另一个增加是类级别的注释
@Validated
class UserController
{
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, params ="action=testAction")
public Test update(@Size(min = 1) @RequestBody List<String> ids,@Min(3) @PathVariable String name) {
return doSomething(ids, name);
}
}
@已验证
类用户控制器
{
@RequestMapping(value=“/{id}”,method=RequestMethod.PUT,params=“action=testAction”)
公共测试更新(@Size(min=1)@RequestBody列表ID,@min(3)@PathVariable字符串名称){
返回剂量表(ID、名称);
}
}
您需要注册bean来启动方法级验证注释
委托JSR-303提供程序执行方法级
注释方法的验证
那么
@RequestMapping(value=“/{id}”,method=RequestMethod.PUT)
公共测试更新(
@RequestBody列表ID的大小(最小值=1),
@Min(3)@PathVariable(“id”)字符串名称){
返回剂量表(ID、名称);
}
如果您想处理验证异常
@ExceptionHandler(value = { ConstraintViolationException.class })
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public String handleResourceNotFoundException(ConstraintViolationException e) {
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
StringBuilder strBuilder = new StringBuilder();
for (ConstraintViolation<?> violation : violations ) {
strBuilder.append(violation.getMessage() + "\n");
}
return strBuilder.toString();
}
@ExceptionHandler(值={ConstraintViolationException.class})
@ResponseStatus(值=HttpStatus.BAD_请求)
公共字符串句柄ResourceNotFoundException(ConstraintViolationException e){
SET谢谢你的详细回答,我忘了添加bean配置,另一件事是我忘了在类级别添加@validated注释。现在它可以工作了。除此之外,你需要将@validated添加到类型级别,否则类将不会触发验证。我只是在我的类中添加了@validated,它就工作了。
@Validated
class UserController
{
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, params ="action=testAction")
public Test update(@Size(min = 1) @RequestBody List<String> ids,@Min(3) @PathVariable String name) {
return doSomething(ids, name);
}
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public Test update(
@Size(min = 1) @RequestBody List<String> ids,
@Min(3) @PathVariable("id") String name) {
return doSomething(ids, name);
}
@ExceptionHandler(value = { ConstraintViolationException.class })
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public String handleResourceNotFoundException(ConstraintViolationException e) {
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
StringBuilder strBuilder = new StringBuilder();
for (ConstraintViolation<?> violation : violations ) {
strBuilder.append(violation.getMessage() + "\n");
}
return strBuilder.toString();
}