在Service層、Rpc服務層等其它地方使用Hibernate Validator進行參數校驗

如何在非Controller層使用Hibernate Validator框架校驗,本文將介紹在Service層、Rpc服務層等其它地方使用Hibernate Validator進行參數校驗。

1、添加Hibernate Validator依賴

         <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.4.3.Final</version>
        </dependency>
         <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.el</artifactId>
            <version>3.0.0</version>
        </dependency>

2、定義校驗規則

public class Goods {

    private Long id;

    @NotNull(message = "價格不能爲空")
    private BigDecimal price;

    @NotNull(message = "名稱不能爲空")
    private String name;
}

3、依賴注入Validator並進行校驗

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.validation.ConstraintViolation;
import javax.validation.ValidationException;
import javax.validation.Validator;
import java.util.Set;

@Component
public class MyValidator {
    //springboot中可直接依賴注入
    private Validator validator=Validation.buildDefaultValidatorFactory().getValidator();

    @Autowired
    private GoodsDao goodsDao;

    /**
     * 通過HibernateValidator驗證bean
     *
     * @param o
     */
    public void validate(Object o) {
        Set<ConstraintViolation<Object>> errors = validator.validate(o);
        if (!errors.isEmpty()) {
            throw new ValidationException(errors.iterator().next().getMessage());
        }
    }
    
    //just for test
    public void save(Goods goods){
        validate(goods);
        goodsDao.insert(goods)
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章