验证类
public class BeanValidUtil { /** * 验证参数bean(包括内部的子bean) * * @param t * 参数对象 例如Fxfa * @param optype * 操作类型 枚举 * @throws FkptServiceException */ @SuppressWarnings({"rawtypes", "unchecked"}) public static void valid(Object t, OperateType optype) throws FkptServiceException { try { // 验证主的参数bean validSingle(t, optype); // 验证主bean中的list对象 Class cls = t.getClass(); for (Field field : cls.getDeclaredFields()) { if (field.getType() == List.class) { PropertyDescriptor pd = new PropertyDescriptor(field.getName(), cls); Method getMethod = pd.getReadMethod();// 获得get方法 List<Object> list = (List<Object>) getMethod.invoke(t); if (!CollectionUtils.isEmpty(list)) { for (Object o : list) { validSingle(o, optype); } } } } } catch (Exception e) { throw new FkptServiceException(e.getMessage(), e); } } @SuppressWarnings("rawtypes") public static void validSingle(Object t, OperateType optype) throws FkptServiceException { StringBuilder err = new StringBuilder(""); // 获取注解信息 BeanVaild bv = null; Class cls = t.getClass(); // 检测field是否存在 try { Field[] fields = cls.getDeclaredFields(); for (Field f : fields) { bv = f.getAnnotation(BeanVaild.class); // 不为空执行校验 if (bv != null) { // 新增验证 if (optype == OperateType.ADD && bv.addOp()) { err.append(checkType(f, bv.type(), t)); } else if (optype == OperateType.UPDATE && bv.updateOp()) { // 更新验证 err.append(checkType(f, bv.type(), t)); } } } String errmsg = err.toString(); if (!StringUtil.isNullString(errmsg)) { throw new FkptServiceException(errmsg); } } catch (Exception e) { throw new FkptServiceException(ServiceExcuteMessage.FKPT_BEAN_VALID_001, e, t.getClass().getName(), e.getMessage()); } } // 根据不同的验证类型执行验证操作 public static StringBuilder checkType(Field field, ValidTypes type, Object t) throws Exception { StringBuilder err = new StringBuilder(); switch (type) { case NOTNULL: err.append(checkNotNull(field.getName(), type, t)); break; default: err.append(""); break; } return err; } // 非空验证 private static StringBuilder checkNotNull(String fieldName, ValidTypes type, Object t) throws Exception { PropertyDescriptor pd = new PropertyDescriptor(fieldName, t.getClass()); Method getMethod = pd.getReadMethod();// 获得get方法 String fieldVal = (String) getMethod.invoke(t); if (StringUtil.isNullString(fieldVal)) { return new StringBuilder("获取【" + fieldName + "】失败,该字段不能为空\n"); } else { return new StringBuilder(""); } } }
注解接口
@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface BeanVaild { /** * 验证类型 */ ValidTypes type() default ValidTypes.NOTNULL; /** * 新增操作类型 */ boolean addOp() default false; /** * 更新操作类型 */ boolean updateOp() default false; }
类型枚举
public enum OperateType { /** * 操作类型 新增 */ ADD, /** * 操作类型 更新 */ UPDATE }
public enum ValidTypes { /** * 不能为空 */ NOTNULL }
javabean主类
public class Fxfa extends BaseBean { private static final long serialVersionUID = 8239685879814948678L; /** * 方案编号 */ @BeanVaild(type = ValidTypes.NOTNULL, updateOp = true) private String fabh; /** * 方案名称 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true, updateOp = true) private String famc; /** * 方案类型 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true) private String falx; /** * 优先级 */ private String yxj; /** * 优先级名称 */ private String yxjMc; /** * 版本 */ private String bb; /** * 预警值测算方案 */ private String yjzcsfa; /** * 预警值测算方案名称 */ private String yjzcsfaMc; /** * 父方案代码,即上一版本方案代码 */ private String fabhF; /** * 初方案代码,即初始版本方案代码 */ private String fabhC; /** * 有效标志(Y、N) */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true) private String yxbz; /** * 来源(1:系统自建;2:外部导入) */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true) private String ly; /** * 制定人员代码 */ private String zdRyDm; /** * 制定税务机关代码 */ private String zdSwjgDm; /** * 制定时间 */ private String zdsj; /** * 修改人员代码 */ private String xgRyDm; /** * 修改税务机关代码 */ private String xgSwjgDm; /** * 修改时间 */ private String xgsj; /** * 关键词 */ private String gjc; /** * 说明 */ private String sm; /** * 纳税评估项目ID */ private String nspgxmid; /** * 纳税评估项目MC */ private String nspgxmmc; /** * 系统代码 */ private String xtdm; /** * 分析模型列表 */ private List<FxfaFxmxXx> lstFxmxXx = new ArrayList<FxfaFxmxXx>(); /** * 指标元条件 */ private List<FxfaZbyTj> lstZbyTj = new ArrayList<FxfaZbyTj>(); /** * 维度条件列表 */ private List<FxfaWdTj> lstWdTj = new ArrayList<FxfaWdTj>(); /** * @return the lstZbyTj */ public List<FxfaZbyTj> getLstZbyTj() { return lstZbyTj; } /** * @param lstZbyTj * the lstZbyTj to set */ public void setLstZbyTj(List<FxfaZbyTj> lstZbyTj) { this.lstZbyTj = lstZbyTj; } /** * @return the lstWdTj */ public List<FxfaWdTj> getLstWdTj() { return lstWdTj; } /** * @param lstWdTj * the lstWdTj to set */ public void setLstWdTj(List<FxfaWdTj> lstWdTj) { this.lstWdTj = lstWdTj; } /** * @return the fabh */ public String getFabh() { return fabh; } /** * @param fabh * the fabh to set */ public void setFabh(String fabh) { this.fabh = fabh; } /** * @return the famc */ public String getFamc() { return famc; } /** * @param famc * the famc to set */ public void setFamc(String famc) { this.famc = famc; } /** * @return the falx */ public String getFalx() { return falx; } /** * @param falx * the falx to set */ public void setFalx(String falx) { this.falx = falx; } /** * @return the yxj */ public String getYxj() { return yxj; } /** * @param yxj * the yxj to set */ public void setYxj(String yxj) { this.yxj = yxj; } /** * @return the bb */ public String getBb() { return bb; } /** * @param bb * the bb to set */ public void setBb(String bb) { this.bb = bb; } /** * @return the fabhF */ public String getFabhF() { return fabhF; } /** * @param fabhF * the fabhF to set */ public void setFabhF(String fabhF) { this.fabhF = fabhF; } /** * @return the fabhC */ public String getFabhC() { return fabhC; } /** * @param fabhC * the fabhC to set */ public void setFabhC(String fabhC) { this.fabhC = fabhC; } /** * @return the yxbz */ public String getYxbz() { return yxbz; } /** * @param yxbz * the yxbz to set */ public void setYxbz(String yxbz) { this.yxbz = yxbz; } /** * @return the ly */ public String getLy() { return ly; } /** * @param ly * the ly to set */ public void setLy(String ly) { this.ly = ly; } /** * @return the zdRyDm */ public String getZdRyDm() { return zdRyDm; } /** * @param zdRyDm * the zdRyDm to set */ public void setZdRyDm(String zdRyDm) { this.zdRyDm = zdRyDm; } /** * @return the zdSwjgDm */ public String getZdSwjgDm() { return zdSwjgDm; } /** * @param zdSwjgDm * the zdSwjgDm to set */ public void setZdSwjgDm(String zdSwjgDm) { this.zdSwjgDm = zdSwjgDm; } /** * @return the zdsj */ public String getZdsj() { return zdsj; } /** * @param zdsj * the zdsj to set */ public void setZdsj(String zdsj) { this.zdsj = zdsj; } /** * @return the xgRyDm */ public String getXgRyDm() { return xgRyDm; } /** * @param xgRyDm * the xgRyDm to set */ public void setXgRyDm(String xgRyDm) { this.xgRyDm = xgRyDm; } /** * @return the xgSwjgDm */ public String getXgSwjgDm() { return xgSwjgDm; } /** * @param xgSwjgDm * the xgSwjgDm to set */ public void setXgSwjgDm(String xgSwjgDm) { this.xgSwjgDm = xgSwjgDm; } /** * @return the xgsj */ public String getXgsj() { return xgsj; } /** * @param xgsj * the xgsj to set */ public void setXgsj(String xgsj) { this.xgsj = xgsj; } /** * @return the gjc */ public String getGjc() { return gjc; } /** * @param gjc * the gjc to set */ public void setGjc(String gjc) { this.gjc = gjc; } /** * @return the yjzcsfa */ public String getYjzcsfa() { return yjzcsfa; } /** * @param yjzcsfa * the yjzcsfa to set */ public void setYjzcsfa(String yjzcsfa) { this.yjzcsfa = yjzcsfa; } /** * @return the lstFxmxXx */ public List<FxfaFxmxXx> getLstFxmxXx() { return lstFxmxXx; } /** * @param lstFxmxXx * the lstFxmxXx to set */ public void setLstFxmxXx(List<FxfaFxmxXx> lstFxmxXx) { this.lstFxmxXx = lstFxmxXx; } /** * @return the sm */ public String getSm() { return sm; } /** * @param sm * the sm to set */ public void setSm(String sm) { this.sm = sm; } /** * @return the yjzcsfaMc */ public String getYjzcsfaMc() { return yjzcsfaMc; } /** * @param yjzcsfaMc * the yjzcsfaMc to set */ public void setYjzcsfaMc(String yjzcsfaMc) { this.yjzcsfaMc = yjzcsfaMc; } /** * @return the yxjMc */ public String getYxjMc() { return yxjMc; } /** * @param yxjMc * the yxjMc to set */ public void setYxjMc(String yxjMc) { this.yxjMc = yxjMc; } /** * @return 获取 nspgxmid */ public String getNspgxmid() { return nspgxmid; } /** * @param nspgxmid * 设置 nspgxmid */ public void setNspgxmid(String nspgxmid) { this.nspgxmid = nspgxmid; } /** * @return 获取 nspgxmmc */ public String getNspgxmmc() { return nspgxmmc; } /** * @param nspgxmmc * 设置 nspgxmmc */ public void setNspgxmmc(String nspgxmmc) { this.nspgxmmc = nspgxmmc; } /** * @return the xtdm */ public String getXtdm() { return xtdm; } /** * @param xtdm * the xtdm to set */ public void setXtdm(String xtdm) { this.xtdm = xtdm; } }
字bean
public class FxfaWdTj implements Serializable { private static final long serialVersionUID = -7624527525952631847L; /** * 方案编号 */ private String fabh; /** * 序号 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true, updateOp = true) private String xh; /** * 条件名称 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true, updateOp = true) private String tjmc; /** * 条件表 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true, updateOp = true) private String tjb; /** * 条件字段 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true, updateOp = true) private String tjzd; /** * 条件符 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true, updateOp = true) private String tjf; /** * 条件值 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true, updateOp = true) private String tjz; /** * 页面显示代码 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true, updateOp = true) private String xsdm; /** * 页面显示名称 */ @BeanVaild(type = ValidTypes.NOTNULL, addOp = true, updateOp = true) private String xsmc; /** * @return the fabh */ public String getFabh() { return fabh; } /** * @param fabh * the fabh to set */ public void setFabh(String fabh) { this.fabh = fabh; } /** * @return the tjmc */ public String getTjmc() { return tjmc; } /** * @param tjmc * the tjmc to set */ public void setTjmc(String tjmc) { this.tjmc = tjmc; } /** * @return the tjb */ public String getTjb() { return tjb; } /** * @param tjb * the tjb to set */ public void setTjb(String tjb) { this.tjb = tjb; } /** * @return the tjzd */ public String getTjzd() { return tjzd; } /** * @param tjzd * the tjzd to set */ public void setTjzd(String tjzd) { this.tjzd = tjzd; } /** * @return the tjf */ public String getTjf() { return tjf; } /** * @param tjf * the tjf to set */ public void setTjf(String tjf) { this.tjf = tjf; } /** * @return the tjz */ public String getTjz() { return tjz; } /** * @param tjz * the tjz to set */ public void setTjz(String tjz) { this.tjz = tjz; } /** * @return the xsdm */ public String getXsdm() { return xsdm; } /** * @param xsdm * the xsdm to set */ public void setXsdm(String xsdm) { this.xsdm = xsdm; } /** * @return the xsmc */ public String getXsmc() { return xsmc; } /** * @param xsmc * the xsmc to set */ public void setXsmc(String xsmc) { this.xsmc = xsmc; } /** * @return the xh */ public String getXh() { return xh; } /** * @param xh * the xh to set */ public void setXh(String xh) { this.xh = xh; } }
验证调用
// 新增 if (StringUtil.isNullString(fxfa.getFabh())) { // 新增时验证参数 BeanValidUtil.valid(fxfa, OperateType.ADD); fxfa.setFabh(UUIDUtil.nextVal()); ServiceExecuteUtil.executeDao("fxpt.core.fak.fxfa.dao.insertFxfa", new Object[] {fxfa, loginuser}); } else { // 修改 // 修改时验证参数 BeanValidUtil.valid(fxfa, OperateType.UPDATE); ServiceExecuteUtil.executeDao("fxpt.core.fak.fxfa.dao.updateFxfa", new Object[] {fxfa, loginuser}); }
相关推荐
JavaBean验证实现方法示例 JavaBean 验证是 Java 语言中的一种重要机制,用于确保数据的正确性和合法性。验证的目的是为了确保数据符合预期的格式和规则,从而避免错误和异常。在 Java 中,有多种验证机制,包括 ...
在实际开发中,遍历Java Bean和利用注解可以增强代码的可读性、可维护性和灵活性。例如,注解可以用于数据验证、持久化映射、AOP切面等。理解并熟练运用这两个概念,能让你在Java开发中更得心应手。 以上内容围绕...
Java提供了`java.lang.annotation`包来处理注解,而`minimalcode-reflect`可能提供了一种更简洁的方式,用于在反射过程中分析和利用注解信息,比如验证Bean是否满足特定约束,或者根据注解自动生成某些逻辑。...
7. **Interceptor(拦截器)**:拦截器可以对请求和响应进行预处理和后处理,比如权限验证、日志记录等。 8. **Annotation**:注解是SpringMVC中的重要工具,如`@Controller`、`@RequestMapping`、`@Service`、`@...
注解提供了一种方式,使得程序员可以在代码中添加元数据(metadata),这些数据不直接影响代码执行,但可以被编译器、IDE或其他工具使用,以实现各种自动化任务,如代码分析、性能优化、生成文档或验证代码约束。...
### Java Annotation ...注解的强大之处在于其灵活性和扩展性,通过结合注解处理器等工具,可以实现代码生成、验证等多种高级功能。在未来的学习和实践中,不断探索注解的高级用法,将有助于提升开发效率和代码质量。
注解(Annotation)是另一种元数据形式,用于提供有关代码的信息,如元编程、编译时验证和运行时处理。注解可以自定义,也可以使用Java内置的注解,如`@Override`、`@Deprecated`等。 总的来说,这个PPT覆盖了Java...
它简化了JDBC访问数据库的代码,并作为主流的持久化框架,利用Java反射机制实现透明性。其工作流程包括: - 读取配置文件和映射信息 - 创建SessionFactory - 打开Session - 创建Transaction - 数据持久化操作 ...
8. **集合框架**:Java 集合框架包括 List、Set、Map 等接口和实现类,提供了数据存储和操作的统一接口。ArrayList、LinkedList、HashSet、HashMap 等是常用的集合类。 9. **IO 流**:Java IO 模块提供了读写文件、...
1. **反射机制**:首先,通过Java的反射API遍历Java Bean的所有属性,获取其类型、注解等信息。 2. **类型映射**:将Java类型映射到JSON Schema的数据类型,例如,Java的`String`对应JSON Schema的`string`,`...
- Hibernate通过配置文件中的`many-to-one`、`one-to-many`、`many-to-many`等注解实现对象间的关联,如一对一、一对多和多对多关系。 4. **Hibernate缓存机制**: - 一级缓存是Hibernate内部的Session级别的缓存...
16.5 利用反射获取注解信息438 16.6 上机练习440 17.1 功能描述442 17.2 总体设计442 17.3 代码实现442 17.4 程序的运行与发布457 17.5 本章练习460 第18章 18.1 JDBC简介462 18.2 JDBC类和接口462 18.2.1 ...
Betwixt基于JavaBeans规范,通过反射和注解来实现XML和Java对象之间的映射。它通过分析Java类的结构来生成XML,或者根据XML的结构来创建Java对象实例。在处理相同节点名的情况下,Betwixt允许我们通过属性名和类型来...
配置文件Struts-config.xml包含了ActionForm、Action和Forward等的配置,通过XML解析并利用反射技术来使用这些配置。 Struts2则引入了FilterDispatcher作为中央控制器的过滤器,Action现在位于Model层,负责调用...
这款框架在2000年代初期非常流行,帮助开发者组织和管理Java Servlets、JSP(JavaServer Pages)以及JavaBean组件,以实现业务逻辑与表现层的分离,提高开发效率和代码可维护性。 **Struts框架的核心概念:** 1. *...
3. **反射机制**:利用Java反射,实现对象和数据库记录之间的透明映射。 4. **性能优化**:Hibernate是轻量级框架,具有良好的性能,支持多种数据库和复杂的对象关系映射。 【Hibernate的延迟加载和关系映射】 - *...
JSR-303规范定义了一套元数据模型和API,允许开发者在JavaBean中声明性地指定验证约束。Hibernate Validator为该规范提供了一个完整的实现,并且提供了额外的约束(例如,NotNull如果null不为空,Size验证大小等)。...
单例工具(Singleton)和断言(Assert)工具可以方便地实现单例模式和断言验证。二进码十进数(BCD)和控制台打印封装(Console)提供了二进制和十进制相互转换以及格式化控制台输出的功能。 字段验证器(Validator...
- `org.springframework.beans-3.1.1.RELEASE.jar`: 提供了对JavaBean属性操作的支持,包括对属性的设置和获取,以及对JavaBean的类型转换和验证等。 - `org.springframework.core-3.1.1.RELEASE.jar`: 包含了...
从版本1.8.3开始,BeanUtils引入了对JSR-303/JSR-349 Bean Validation注解的支持,如@NotNull、@Min等,这些注解可以在复制属性时进行验证。 7. 预防性拷贝: BeanUtils还提供了`PropertyUtils.copyProperties()`...