校验参数统一异常处理工具

校验参数统一异常处理工具

1.目的:

解决过往在业务里面写一大堆的校验程序,使程序的可读性特别差,而且耦合度很高,这就很不符合程序设计原则,所以本人就该问题做了一个统一处理的工具。

2.技术栈:

java反射、策略模式、java8

3.demo:

1.定义异常的接口:

public interface BaseServiceErrors  {
// 添加系统各系统的自定义异常
   
  ErrorMeta PARAM_INVALID = new ErrorMeta(70002,"请求参数不能为空");
   
  // 参数为空校验,采用策略模式
   
  ErrorMeta strategy(String para);
   
  //属性匹配空值异常
    
  static ErrorMeta match(Map<String, ErrorMeta> map,String para){
        
     if (map.containsKey(para)) {
            
         return map.get(para);
        
     }
     
        return null;
    
  }

}

2.可以有多个实现类,在这只举一个实现例子

   public class QuestionError implements BaseServiceErrors {

      private Map<String, ErrorMeta> map = new HashMap<>();

      public QuestionError() {
        
        this.map.put("type", new ErrorMeta(70001, "题目类型不能为空"));
    
      }

      @Override
      
public ErrorMeta strategy(String para) {
        
        return BaseServiceErrors.match(map,para);
    
      }
    
}

3.定义策略类:

public class StrategyImpl {

    private BaseServiceErrors baseServiceErrors;

    public StrategyImpl(Object baseServiceErrors) {
     
       this.baseServiceErrors = (BaseServiceErrors) baseServiceErrors;
    
    }

    public ErrorMeta checkPara(String para) {
        
       return this.baseServiceErrors.strategy(para);
    
    }
}

4.具体业务对象类:

@Data

public class QuestionEntity implements Serializable {

    
    private static final long serialVersionUID = -1132588413262899197L;

    
    private String description;

    
    private Integer type;

    
    private Integer currentPage;

    
    private Integer pageSize;

}

5.工具类入口:

/**
 
 * @param o   参数对象
 
 * @param o2  具体策略对象
 
 * @throws IllegalAccessException
 
 * @throws InstantiationException
 
 */

public static void checkFieldVal(Object o,Object o2) throws IllegalAccessException, InstantiationException {
    
    // 得到类对象
    
    Class<?> aClass = o.getClass();
    
    // 获取属性集合
    
    Field[] fields = aClass.getDeclaredFields();
    
    // 获取策略对象
    
    StrategyImpl strate = new StrategyImpl( o2.getClass().newInstance());
    
    for (Field f : fields) {
        
        f.setAccessible(true); // 设置些属性是可以访问的
        
        // 执行具体策略
        
        ErrorMeta errorMeta = strate.checkPara(f.getName());
        
        if (errorMeta != null && f.get(o) == null) {
            
            throw new LogicException(errorMeta);
        
        }
    
    }

}

至此,一套公共的异常处理(本例只是处理空值异常,可根据具体业务横向扩展)一切准备就绪。

下面做具体演示

public static void main(String[] args) {

    QuestionEntity entity = new QuestionEntity();

    entity.setCurrentPage(1);
    
    entity.setDescription("asdsd");

    try {
    
      checkFieldVal(entity,new QuestionError());

      System.out.println("asdasdsadas");

    } catch (Exception e) {

      e.printStackTrace();

    }


}

没有给type赋值,抛出

1112249-20180727140202695-146395188.png

说明抛出了业务想要的异常,然后可根据具体场景做捕获操作返回给前端,
该工具类业务方秩序添加:


checkFieldVal('参数对象','参数策略对象');


一行代码即可实现,解耦,可读性高,开箱即用,使用非常方便。

--注:ErrorMeta为我们公司公共封装的异常类

public class ErrorMeta {
    private Integer code;
    private String msg;

    public ErrorMeta(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getMsg() {
        return this.msg;
    }

    public Integer getCode() {
        return this.code;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public void setCode(Integer code) {
        this.code = code;
    }
}
posted on 2018-07-27 14:03  albert1 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/niuwang/p/9377267.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校验MultipartFile中的文件格式,可以参考引用中提供的方法。该方法是一个Java后端方法,接受一个MultipartFile参数,并返回一个boolean类型,用于判断文件是否为视频。在该方法中,可以通过判断文件的后缀名或者文件的MIME类型来进行文件格式的校验。在校验过程中,还可以考虑处理一些异常情况,比如空文件的校验等。另外,引用中的代码提供了一个多文件上传的校验方法,可以通过调用这个方法来校验多个文件的格式。在使用时,建议在文件上传开始的位置添加这个校验方法,以确保上传的文件符合要求。具体实现细节可以参考引用和引用[2]中提供的代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [[文件上传工具类] MultipartFile 统一校验](https://blog.csdn.net/pingzhuyan/article/details/128801681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [LanDuoZi_IsVideo.java](https://download.csdn.net/download/qq_41511320/18435406)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值