<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                #### 2.8 Excel導入校驗 校驗,是一個不可或缺的功能,現在java校驗主要是JSR 303 規范,實現方式主流的有兩種 * Hibernate Validator * Apache Commons Validator 這個AutoPoi沒有限制,只要你防止一個實現丟到maven中就可以了,但是Hibernate Validator用的貌似多一些 之前的版本AutoPoi有定義自己的實現,但是后來拋棄了,沒有必要造這種輪子,這個了功能已經夠豐富了 ## 使用 ***對象*** AutoPoi的校驗使用也很簡單,對象上加上通用的校驗規則或者這定義的這個看你用的哪個實現 然后params.setNeedVerfiy(true);配置下需要校驗就可以了 看下具體的代碼 ~~~ /** * Email校驗 */ @Excel(name = "Email", width = 25) private String email; /** * 最大 */ @Excel(name = "Max") @Max(value = 15,message = "max 最大值不能超過15" ,groups = {ViliGroupOne.class}) private int max; /** * 最小 */ @Excel(name = "Min") @Min(value = 3, groups = {ViliGroupTwo.class}) private int min; /** * 非空校驗 */ @Excel(name = "NotNull") @NotNull private String notNull; /** * 正則校驗 */ @Excel(name = "Regex") @Pattern(regexp = "[\u4E00-\u9FA5]*", message = "不是中文") private String regex; ~~~ 這里的校驗規則都是JSR 303 的,使用方式也是的,這里就不做解釋了 然后使用方式是 ~~~ @Test public void basetest() { try { ImportParams params = new ImportParams(); params.setNeedVerfiy(true); params.setVerfiyGroup(new Class[]{ViliGroupOne.class}); ExcelImportResult<ExcelVerifyEntity> result = ExcelImportUtil.importExcelMore( new File(PoiPublicUtil.getWebRootPath("import/verfiy.xlsx")), ExcelVerifyEntity.class, params); FileOutputStream fos = new FileOutputStream("D:/excel/ExcelVerifyTest.basetest.xlsx"); result.getWorkbook().write(fos); fos.close(); for (int i = 0; i < result.getList().size(); i++) { System.out.println(ReflectionToStringBuilder.toString(result.getList().get(i))); } Assert.assertTrue(result.getList().size() == 1); Assert.assertTrue(result.isVerfiyFail()); } catch (Exception e) { LOGGER.error(e.getMessage(),e); } } ~~~ ***ExcelImportResult*** 我們會返回一個ExcelImportResult 對象,比我們平時返回的list多了一些元素 ~~~ /** * 結果集 */ private List<T> list; /** * 是否存在校驗失敗 */ private boolean verfiyFail; /** * 數據源 */ private Workbook workbook; ~~~ 一個是集合,是一個是是否有校驗失敗的數據,一個原本的文檔,但是在文檔后面追加了錯誤信息 ***注意,這里的list,有兩種返回*** * 一種是只返回正確的數據 * 一種是返回全部的數據,但是要求這個對象必須實現IExcelModel接口,如下 ***IExcelModel*** ~~~ public class ExcelVerifyEntityOfMode extends ExcelVerifyEntity implements IExcelModel { private String errorMsg; @Override public String getErrorMsg() { return errorMsg; } @Override public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } } ~~~ **\*IExcelDataModel** 獲取錯誤數據的行號 ~~~ public interface IExcelDataModel { /** * 獲取行號 * @return */ public int getRowNum(); /** * 設置行號 * @param rowNum */ public void setRowNum(int rowNum); } ~~~ 需要對象實現這個接口 每行的錯誤數據也會填到這個錯誤信息中,方便用戶后面自定義處理 看下代碼 ~~~ @Test public void baseModetest() { try { ImportParams params = new ImportParams(); params.setNeedVerfiy(true); ExcelImportResult<ExcelVerifyEntityOfMode> result = ExcelImportUtil.importExcelMore( new FileInputStream(new File(PoiPublicUtil.getWebRootPath("import/verfiy.xlsx"))), ExcelVerifyEntityOfMode.class, params); FileOutputStream fos = new FileOutputStream("D:/excel/baseModetest.xlsx"); result.getWorkbook().write(fos); fos.close(); for (int i = 0; i < result.getList().size(); i++) { System.out.println(ReflectionToStringBuilder.toString(result.getList().get(i))); } Assert.assertTrue(result.getList().size() == 4); } catch (Exception e) { LOGGER.error(e.getMessage(),e); } } ~~~ ***IExcelVerifyHandler*** 加入上面的不滿足你,你可以用接口實現自己的校驗規則,比如唯一性校驗,等等,需要返回錯誤信息和成功與否 ~~~ public interface IExcelVerifyHandler<T> { /** * 導入校驗方法 * * @param obj * 當前對象 * @return */ public ExcelVerifyHanlderResult verifyHandler(T obj); } ~~~ 調用順序是先通用的,再接口,到這里校驗的就完整了,下面給大家看下錯誤的excel返回 ![yy](https://static.oschina.net/uploads/img/201709/18141356_UPlR.png "錯誤返回")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看