JFinal-java8 集成 hibernate-validator

Hibernate Validator 是 Bean Validation 的参考实现。Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。可查看hibernate-validator注解

集成

添加依赖

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.5.Final</version>
</dependency>

当然如果报异常,如下:

javax.validation.ValidationException: HV000183: Unable to initialize 'javax.el.ExpressionFactory'.

你可能还需要添加

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <version>3.0.0</version>
    <scope>provided</scope>
</dependency>

初始化

先看下使用

/**
 * save 与 update 的业务逻辑在实际应用中也应该放在 serivce 之中,
 * 并要对数据进正确性进行验证,在此仅为了偷懒
 */
public void save(@Valid BlogForm form) {
    // java bean转Model
    BeanUtils.copy(form, Blog.class).save();
    redirect("/blog");
}

public class BlogForm {
    private Integer id;
    @NotBlank(message = "请输入Blog标题!")
    private String title;
    @NotBlank(message = "请输入Blog内容!")
    private String content;
    // ..... 省略get、set
}

Controller(控制器)层获取模型Bean,使用@Valid注解标记完成校验。

在JFinal中使用Interceptor拦截器可以对控制器层轻松完成各种控制。

public class BeanValidator implements Interceptor {
    private final Validator validator;
    
    public BeanValidator() {
        // 初始化校验器
        this.validator = Validation.buildDefaultValidatorFactory().getValidator();
    }
    
    @Override
    public void intercept(Invocation inv) {
        // 获取方法参数数组
        Parameter[] params = inv.getMethod().getParameters();
        for (int i = 0; i < params.length; i++) {
            Parameter parameter = params[i];
            // 判断参数
            Valid valid = parameter.getAnnotation(Valid.class);
            if (valid == null) { continue; }
            Object object = inv.getArg(i);
            Set<ConstraintViolation<Object>> set = validator.validate(object);
            // 没有错误继续下一次循环
            if (set.isEmpty()) { continue; }
            // 校验错误信息返回
            ConstraintViolation<Object> v = set.stream().findFirst().get();
            Ret ret = Ret.fail("msg", v.getMessage());
            // 返回错误json
            inv.getController().renderJson(ret);
            return;
        }
        inv.invoke();
    }

}

当然上面你可以根据自己的业务定制。 BeanUtils可参考下面:https://gitee.com/dreamlu/Easy4JFinal/blob/master/easy-core/src/main/java/net/dreamlu/easy/commons/utils/BeanUtils.java

本文仅仅抛砖,你可以制定规则将其封装得更加通用。

转载于:https://my.oschina.net/qq596392912/blog/1580019

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值