`

mongodb 搭配JSR-303验证框架

阅读更多
在mongodb中,如何对一个对象插入collection时进行验证呢?因为mongodb毕竟是NOSQL,跟关系数据库有点不同,所以其中一个校验的思路方法,是使用JSR-303的标准校验,
这个在HIBERNATE 4和spring 3中其实已经支持了,下面讲解下方法:

1) MAVEN中如下配置
  
<dependency>    <groupId>javax.validation</groupId>    <artifactId>validation-api</artifactId>    <version>1.0.0.GA</version>    <scope>compile</scope></dependency> <dependency>    <groupId>org.hibernate</groupId>    <artifactId>hibernate-validator</artifactId>    <version>4.2.0.Final</version></dependency>



2 spring 中引入验证框架
 
<bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>


3 因为要在对象保存前进行验证,因此可以扩展spring for mongodb中的
AbstractMongoEventListener 类进行监听,重写其 onBeforeSave方法
  
@Component
public class BeforeSaveValidator extends AbstractMongoEventListener
 {   
  @Override    
public void onBeforeSave(Object source, DBObject dbo)
 {     
   // do validation here  
  }
}


4 然后调用validator.validate方法进行验证,返回的是一个set,就是哪些不符合要求的,代码如下:
  
@Componentpublic 
class BeforeSaveValidator extends AbstractMongoEventListener 
{  
   @Autowired
    private Validator validator;   
  @Override  
  public void onBeforeSave(Object source, DBObject dbo)
 {        Set<ConstraintViolation<Object>> violations = validator.validate(source);      
   if (violations.size() > 0) 
{ 
           throw new ConstraintViolationException(violations);    
    }
    }
}


5 写个类测试下,用注解:
  

public class User 
{    @Size(min = 10) 
   private String name;  
   @Min(18) 
   private Integer age;  
   public User(String name, Integer age) 
{       
 this.name = name;   
     this.age = age;  
  }    
 public String getName()
 {    
    return name;   
 }   
  public Integer getAge() { 
       return age;
    }
}


6 单元测试下
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class ValidationTest 
{    @Autowired 
   private MongoTemplate mongoTemplate;
     @Test  
  public void shouldThrowValidationException() 
{      
  User user = new User("john", 17);   
      try {       
     mongoTemplate.save(user);       
     fail();      
  } catch (ConstraintViolationException e) 
{            assertThat(e.getViolations()).hasSize(2);   
     } 
   }
}

3
6
分享到:
评论

相关推荐

    springmvc-mongodb

    同时,模型类可能使用了JSR-303/JSR-349 Bean Validation注解进行数据验证。 综上所述,"springmvc-mongodb"项目展示了如何在SpringMVC环境中利用MongoDB进行数据存储和检索,为开发者提供了一个基础但全面的参考...

    springboot+mongodb

    7. **数据验证**:Spring Boot 集成了 JSR-303/JSR-349(Bean Validation),可以在 MongoDB 模型类中添加验证注解,确保数据的正确性。 8. **分页和排序**:Spring Data MongoDB 支持分页查询和结果排序,可以通过...

    Spring3.0Jar包

    5. **JSR-303/JSR-349 验证**:Spring 3.0 集成了 JSR-303/JSR-349 规范,允许开发者通过注解进行Bean验证,例如 `@NotNull`、`@Size` 等,增强了输入数据的验证能力。 6. **泛型支持**:Spring 3.0 引入了对泛型...

    spring3.0最新lib包

    6. **JSR-303/JSR-349 Bean Validation集成**:Spring 3.0集成了JSR-303(在3.1版升级为JSR-349),提供了一种标准的方式来验证Java Bean的属性,增强了数据校验的能力。 7. **WebSocket支持**:虽然Spring 3.0本身...

    dropwizard-java8-mongodb-template

    此外,我们可以使用`@Valid`注解配合JSR-303/JSR-349验证注解对输入数据进行校验。 总结来说,"dropwizard-java8-mongodb-template"为我们提供了一个快速启动RESTful API服务的起点。通过Dropwizard的强大功能,...

    jboss-interceptors-api_1.2_spec-1.0.0.Final.zip

    MongoDB Realm则是Shiro为MongoDB数据库定制的身份验证和授权模块,使得开发者可以利用Shiro的强大功能来管理和保护基于MongoDB存储的用户账户和权限。 【标签】"开源项目" 指的是这两个压缩包都是开源的,这意味着...

    Spring5-尚硅谷框架课堂笔记.rar

    4. **Spring MVC增强**:在Spring5中,Spring MVC进行了优化,例如支持JSR-380(Bean Validation 2.0)进行数据验证,增强了错误处理和国际化支持。 5. **Java 8支持**:Spring5全面支持Java 8,包括Lambda表达式、...

    IntelliJ-IDEA13基础教程

    - Java EE 数据验证:支持 Java EE 6 的数据验证模型 (JSR-303)。 - Java EE 上下文与依赖注入:支持 Java EE 6 的依赖注入模型 (JSR-299)。 - EJB、JPA、Servlet:支持这些 Java EE 技术。 - JMS、JSON 处理、...

    spring-framework-reference3.0和2.5两个版本

    3. **支持JSR-303 Bean验证**:Spring 2.5集成了JSR-303标准,允许在bean属性级别进行数据验证。 4. **增强的AOP支持**:提供了更灵活的切面定义,支持注解驱动的切面编程。 5. **Groovy支持**:引入了对Groovy的...

    Mastering Spring 5.0 - Ranga Rao Karanam

    - 在保持Spring MVC原有强大功能的基础上,Spring 5.0进行了进一步优化,包括更好的类型安全的URL模板,更强大的数据绑定,以及对JSR-303/JSR-349验证的支持。 4. **Java 8兼容性**: - Spring 5.0全面支持Java 8...

    spring framework离线文档

    3. **JSR-303 Bean验证**:Spring 2.5开始支持JSR-303标准,允许在Bean级别进行数据验证。 4. **SpEL(Spring Expression Language)**:一个强大的表达式语言,用于在运行时查询和操作对象图。 5. **AspectJ集成*...

    SpringBoot核心学习文档

    - 使用JSR-303/JSR-349提供的注解进行数据验证。 - 配合Spring MVC实现前端验证与后端校验的联动。 9. **安全控制**: - 引入Spring Security进行权限管理,包括认证和授权。 - 实现OAuth2认证或JWT令牌验证。 ...

    spring3开发包

    4. **JSR-303/JSR-349 Bean Validation 支持**: - Spring3.0 集成了 Bean Validation API,允许开发者使用注解进行数据校验,如 @NotNull、@Size 等,提高了数据验证的灵活性和可复用性。 5. **MVC 框架增强**: ...

    hibernate插件资料

    6. **Hibernate Validator**:这是一款遵循JSR-303/JSR-349标准的bean验证框架,它允许在模型层定义验证规则,并在数据输入时进行检查。Hibernate插件将其集成到持久化框架中,可以确保数据的完整性。 7. **...

    ruoyi-common_若依核心模块代码_

    为了保证输入数据的正确性,“ruoyi-common”可能包含数据验证组件,如 Apache Commons BeanUtils 或 JSR 303/JSR 349 Bean Validation,用于校验业务对象的属性。 8. **国际化与本地化**: 对于多语言支持,核心...

    pro_spring_3

    10. **JSR-303/JSR-349验证**:Spring与JSR-303/JSR-349标准(Java Bean Validation)集成,提供对象级别的数据验证。 11. **Spring Batch**:Spring的批处理框架,用于处理大规模数据处理任务,提供事务管理、错误...

    Api稳定春天启动MongoDB

    4. 数据验证:使用JSR-303/JSR-349 Bean Validation对输入数据进行校验,确保数据正确性。 5. 日志记录:通过集成如Logback或Log4j进行详细的日志记录,便于问题排查和性能分析。 最后,测试是保证API稳定性的关键...

    用Java写的登录注册功能

    - **数据验证**:使用JSR-303 Bean Validation或者自定义验证逻辑,确保输入的有效性,如邮箱格式、用户名唯一性等。 - **密码处理**:对新用户密码进行哈希和加盐处理,然后存储到数据库。 - **邮件验证**:为了...

    springboot.rar

    15. **数据验证**: 使用JSR-303/JSR-349标准的注解(如`@NotNull`、`@Size`等)来验证模型对象的属性,确保数据的正确性。 在实际开发中,我们需要配置Spring Boot的application.properties或application.yml文件,...

    springAPI 3.0中文文档,spingAPI3.2中文版电子档

    3. **JSR-303/JSR-349 Bean Validation**:Spring 3.0集成了Bean Validation规范,允许在Spring MVC中进行数据验证,提高了代码的可维护性和一致性。 4. **Spring Expression Language (SpEL)**:3.0版本加强了SpEL...

Global site tag (gtag.js) - Google Analytics