JAVA-異常與錯誤碼機制


異常機制
  • 核心異常類:PendingException,較其它異常增加了錯誤碼的屬性。
  • 原則上從service,web層的方法調用中,不允許拋出其它非運行時異常,需要將之轉換為PendingException
  • 在某些父類中有將異常轉化為PendingException的方法
 protected PendingException toPendingException(Exception ex, ResBean sysFailedResBean, String message) {
        // 當是PendingException時的處理
        if (ex instanceof PendingException) {
            PendingException pendingException = (PendingException) ex;
            error("操作異常:錯誤碼 = " + pendingException.getCode() + " , 錯誤信息 = " + pendingException.getMessage());
            return pendingException;
            // 其它異常的處理
        } else {
            error("操作異常:" + message, ex);
            return sysFailedResBean.toException(message);
        }
    }
  • 事務中的調用必須要捕獲異常,並手動設置回滾
    @Override
    @RpcMethod("更新商品自定義信息")
    public void updateGoodsSelfDef(@RequestBody GoodsSelfDefUpdateRequest request) throws PendingException {
        validateThrow(request);
        newTransactionTemplate.execute(status -> {
            try {
                // 1.更新商品信息
                Goods sql = Goods.builder()
                        .aliasName(request.getAliasName())
                        .efficacy(replaceSemicolon(request.getEfficacy()))
                        .searchKeywords(addSemicolon(request.getSearchKeywords()))
                        .build();
                if(CollectionUtils.isNotEmpty(request.getGuaranteeCodes())) {
                    sql.setGuarantees(String.join(",", request.getGuaranteeCodes()));
                }
                if(!sql.isAllFiledsNull()) {
                    sql.setId(request.getGoodsId());
                    goodsFacade.update(sql);
                }
                // 2.更新商品分類信息
                updateCategoryGoods(request.getStoreId(), request.getGoodsId(), request.getCategoryIds());
                // 3.更新商品標簽信息
                updateTagGoods(request.getStoreId(), request.getGoodsId(), request.getGoodsTagIds());
                // 3.更新商品活動圖片信息
                commonProfFacade.updateAttachmentList(AttachmentRequest.builder()
                        .businessId(request.getGoodsId())
                        .businessType(BusinessType.GOODS_SPECIAL)
                        .attachmentList(request.getGoodsSpecialImages())
                        .build());
                // 清除緩存
                goodsCache.clearCache(request.getGoodsId());
                return Boolean.TRUE;
            } catch (Exception ex) {
                status.setRollbackOnly();
                error("商品信息更新失敗", ex);
                throw toRpcRuntime(ex);
            }
        });
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM