spring boot@PathVariable无法验证
是的,和和和一样的问题 spring验证不适用于param,不会抛出任何异常,以下是我的代码和@Patrick的答案,thx适用于他spring boot@PathVariable无法验证,spring,validation,spring-boot,Spring,Validation,Spring Boot,是的,和和和一样的问题 spring验证不适用于param,不会抛出任何异常,以下是我的代码和@Patrick的答案,thx适用于他 @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor(); } /** * * @param accountId */ @RequestMapping(value=
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
/**
*
* @param accountId
*/
@RequestMapping(value="/orderDetailSelByAccountId/{accountId}.json",method= {RequestMethod.POST})
@ResponseBody
@Validated
public Result<?> orderDetailSelByAccountId( @NotNull @NotBlank
@Size(min=10,max=32)@PathVariable(value="accountId") String accountId) { .... }
@Bean
公共方法验证后处理器方法验证后处理器(){
返回新的MethodValidationPostProcessor();
}
/**
*
*@param accountId
*/
@RequestMapping(value=“/orderDetailSelByAccountId/{accountId}.json”,方法={RequestMethod.POST})
@应答器
@验证
公共结果orderDetailSelByAccountId(@NotNull@NotBlank
@大小(最小值=10,最大值=32)@PathVariable(value=“accountId”)字符串accountId){..}
但当我发送空accountId时,没有异常抛出。。。
我说的对吗,还有其他解决方案吗?将以下注释添加到为我工作的类中。(不是添加到方法中)
将以下注释添加到为我工作的类中(而不是方法中)
设置名为MethodValidationPostProcessor的bean
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
并将@Validated设置到控制器类中
@Validated
然后,如果您想在控制器建议中正确地捕获它们,请将此代码放入控制器建议中
@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){
Setinflictions=e.getConstraintViolations();
StringBuilder strBuilder=新StringBuilder();
for(约束冲突:冲突){
strBuilder.append(违例.getMessage()+“\n”);
}
返回strBuilder.toString();
}
设置一个名为MethodValidationPostProcessor的bean
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
并将@Validated设置到控制器类中
@Validated
然后,如果您想在控制器建议中正确地捕获它们,请将此代码放入控制器建议中
@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){
Setinflictions=e.getConstraintViolations();
StringBuilder strBuilder=新StringBuilder();
for(约束冲突:冲突){
strBuilder.append(违例.getMessage()+“\n”);
}
返回strBuilder.toString();
}
我知道这个问题已经很老了,但在Spring Boot v2.4.5中也遇到了同样的问题。所有其他的回答对一些灭绝物种都是正确的,我想在这里提供更多的澄清。
正如@Validated
所正确提到的,必须将注释放在类级别上,该注释的处理由MethodValidationPostProcessor
完成,这使我们可以回答。
然而,使用SpringBoot,您基本上可以添加一个对应的实现作为依赖项,这样它就可以进入类路径。
例如,添加:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
我知道这个问题已经很老了,但在SpringBootV2.4.5中也遇到了同样的问题。所有其他的回答对一些灭绝物种都是正确的,我想在这里提供更多的澄清。 正如
@Validated
所正确提到的,必须将注释放在类级别上,该注释的处理由MethodValidationPostProcessor
完成,这使我们可以回答。
然而,使用SpringBoot,您基本上可以添加一个对应的实现作为依赖项,这样它就可以进入类路径。
例如,添加:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
我认为,
@Validated
应该根据您在问题中提供的链接作为类级注释仍然不起作用…………您可以在控制器中收到请求时手动验证它。如果验证失败,则发送错误消息。我认为这应该是更好的方法。我的项目有一个异常中心,它可以捕获启动项目中的所有异常,因此,我认为更好的方法是使用注释和异常中心来处理所有有效的错误,根据这一点和相关的注释,@PathVariable
目前不支持注释。我认为@Validated
应该根据您在问题中提供的链接作为类级注释工作…………当控制器收到请求时,您可以手动验证。如果验证失败,则发送错误消息。我认为这应该是更好的方法。我的项目有一个异常中心,它可以捕获启动项目中的所有异常,因此我认为更好的方法是使用注释和异常中心来处理所有有效的错误。根据这一点和相关的注释,@PathVariable
目前不支持注释。