为了账号安全,请及时绑定邮箱和手机立即绑定

SpringMVC集成hibernate validator进行参数验证时,为什么不直接抛异常?

SpringMVC集成hibernate validator进行参数验证时,为什么不直接抛异常?

BIG阳 2019-03-01 10:49:46
各位大神好,请教个问题 1.环境 spring 4.3.7 hibernate-validator-5.4.1 2.配置如下 <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" name="messageSource"> <property name="basenames"> <list> <value>classpath:messages/messages</value> <value>classpath:messages/ValidationMessages</value> </list> </property> <property name="useCodeAsDefaultMessage" value="false" /> <property name="defaultEncoding" value="UTF-8" /> <property name="cacheSeconds" value="60" /> </bean> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <property name="validationMessageSource" ref="messageSource"/> </bean> <mvc:annotation-driven validator="validator" /> 3.bean和Controller public class UserRequest { @NotBlank(message = "{login.valid.username.notnull}") private String username; @NotBlank(message = "{login.valid.password.notnull}") private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } @RequestMapping(value = "/login", method = RequestMethod.POST) @ResponseBody public Object login(@Valid @RequestBody UserRequest ur, BindingResult result, HttpServletRequest request) { log.debug("login"); if(result.hasErrors()) { return result.getAllErrors().get(0); } …… } 问题:为什么一定要在代码中用result.hasErrors()显示判断?难道不能验证UserRequest中的字段不符合定义就直接抛异常,这样不更合理些吗?
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

你只是在你的应用场景中考虑为什么,一个框架更多的是考虑大多数时候怎么做最合理。

大部分对于客户端数据的验证都不应当被当作“异常”,而是用户在不知道的情况下被允许犯的错误。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 511 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信