我正在使用Spring Boot 1.5.2。RELEASE和不能合并JSR-349(bean验证1.1)的@recestParam
对于POST请求,如果方法参数是Java POJO,那么用@Valid
注释该参数可以正常工作,但注释@RequestParam
我有带注释的控制器类与Spring的@验证
关于这个问题有很多问题,我已经评论过这个答案,它对我不起作用。
Spring Boot包括-validation-api-1.1.0。最终的jar和hibernate-validator-5.3.4。最终的jar
。
我错过什么了吗?
示例代码,
@RequestMapping(method = RequestMethod.GET, value = "/testValidated", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseBean<String> testValidated(@Email @NotEmpty @RequestParam("email") String email) {
ResponseBean<String> response = new ResponseBean<>();
response.setResponse(Constants.SUCCESS);
response.setMessage("testValidated");
logger.error("Validator Not called");
return response;
}
当我为电子邮件
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseBean handle(ConstraintViolationException exception) {
StringBuilder messages = new StringBuilder();
ResponseBean response = new ResponseBean();
exception.getConstraintViolations().forEach(entry -> messages.append(entry.getMessage() + "\n"));
response.setResponse(Constants.FAILURE);
response.setErrorcode(Constants.ERROR_CODE_BAD_REQUEST);
response.setMessage(messages.toString());
return response;
}
响应
添加@Validated时,Spring@Validated@Controller未映射。从控制器本身删除任何继承都会有所帮助。除此之外,萨比尔·汗的回答起了作用,确实起到了帮助。
经过两天多的失败,我问了这个问题
最后,这篇文章帮了大忙。
我分两步解决问题,
1.将以下bean添加到我的配置中
——如果没有这些bean,任何事情都不会起作用。
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
MethodValidationPostProcessor mvProcessor = new MethodValidationPostProcessor();
mvProcessor.setValidator(validator());
return mvProcessor;
}
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setProviderClass(HibernateValidator.class);
validator.afterPropertiesSet();
return validator;
}
2.像下面这样在我的控制器上放置Spring的“验证注释”,
@RestController
@RequestMapping("/...")
@Validated
public class MyRestController {
}
已验证的是-org。springframework。验证。注释。已验证
此设置不会影响同一控制器中的@RequestBody
验证的@Valid
注释,以及那些继续正常工作的注释。
所以现在,我可以触发类似下面的验证方法在MyRestController
类,
@RequestMapping(method = RequestMethod.GET, value = "/testValidated" , consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseBean<String> testValidated(
@Email(message="email RequestParam is not a valid email address")
@NotEmpty(message="email RequestParam is empty")
@RequestParam("email") String email) {
ResponseBean<String> response = new ResponseBean<>();
....
return response;
}
我不得不在异常处理程序中为异常添加另一个处理程序-ConstraintViolationException
,因为@Validated
抛出此异常,而@Valid
抛出MethodArgumentNotValidException
我的bean中有两个字段 当字段key=“A”,“value”应该跟在其他“key”的特定Regex后面时,它可以是任何内容。 如何根据键定义此值验证。
我使用Spring 3.2.2与Primeface 4.0和Hibernate 4.2。我在我的实体上有JSR303验证注释,并且我配置了Spring来在服务层验证它们——这很好。 但是我希望在调用服务之前启动JSF验证,但事实并非如此。我所做的所有研究都表明,我只需在类路径中添加一个验证程序,JSF2就会自动应用。 我已将建议的JAR添加到我的类路径中: 完整的依赖关系树可以在https://g
我正在使用: PrimeFaces 6.1 JSF:2.2.10 javax.validation:1.1.0.final 验证程序IMPL:hibernate-validator 5.0.1.final GAE:1.9.52 以下是使用后端bean进行CSV(客户端验证)的示例:https://www.primefaces.org/showcase/ui/CSV/bean.xhtml 我现在得到
这是用Kotlin编写的User类: 这就是测试: 无效的角色映射为NULL。 这里有一个示例项目,以防您想尝试一些东西。
我试图让Kotlin在spring-data-rest项目上使用JSR303验证。 给定以下数据类声明: 提前感谢您的帮助!