黑马程序员技术交流社区

标题: 【郑州校区】Java的新项目学成在线笔记-day3(十二) [打印本页]

作者: 谷粒姐姐    时间: 2019-1-4 14:24
标题: 【郑州校区】Java的新项目学成在线笔记-day3(十二)
5.4 不可预知异常处理
5.4.1 定义异常捕获方法 5.4.1.1 异常抛出测试
使用postman测试添加页面,不输入cmsPost信息,提交,报错信息如下:
[AppleScript] 纯文本查看 复制代码
org.springframework.http.converter.HttpMessageNotReadableException
此异常是springMVC在进行参数转换时报的错误。

具体的响应的信息为:

[AppleScript] 纯文本查看 复制代码
{  
   "timestamp": 1528712906727,  
   "status": 400,   
  "error": "Bad Request",   
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",   
  "message": "Required request body is missing: public  com.xuecheng.framework.domain.cms.response.CmsPageResult  com.xuecheng.manage_cms.web.controller.CmsPageController.add(com.xuecheng.framework.domain.cms.C msPage)",   
"path": "/cms/page/add"
}  

上边的响应信息在客户端是无法解析的。
在异常捕获类中添加对Exception异常的捕获:

[AppleScript] 纯文本查看 复制代码
@ExceptionHandler(Exception.class) @ResponseBody public ResponseResult exception(Exception exception){   
  //记录日志  
   LOGGER.error("catch exception:{}",exception.getMessage());   
   return null;
}

5.4.1.2 异常捕获方法
针对上边的问题其解决方案是:
1、我们在map中配置HttpMessageNotReadableException和错误代码。 2、在异常捕获类中对Exception异常进行捕获,并从map中获取异常类型对应的错误代码,如果存在错误代码则返 回此错误,否则统一返回99999错误。
具体的开发实现如下:
1、在通用错误代码类CommCode中配置非法参数异常

[AppleScript] 纯文本查看 复制代码
INVALID_PARAM(false,10003,"非法参数!"),

2、在异常捕获类中配置 HttpMessageNotReadableException 为非法参数异常。
异常捕获类代码如下:

[AppleScript] 纯文本查看 复制代码
package com.xuecheng.framework.exception;  
import com.google.common.collect.ImmutableMap;
import com.xuecheng.framework.model.response.CommonCode;
import com.xuecheng.framework.model.response.ResponseResult;
import com.xuecheng.framework.model.response.ResultCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody;  
   /**  * @author Administrator  * @version 1.0  * @create 2018‐06‐11 17:16  **/ @ControllerAdvice public class ExceptionCatch {     private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionCatch.class);   
    //使用EXCEPTIONS存放异常类型和错误代码的映射,ImmutableMap的特点的一旦创建不可改变,并且线程安全     private static ImmutableMap<Class<? extends Throwable>,ResultCode> EXCEPTIONS;   
  //使用builder来构建一个异常类型和错误代码的异常
    protected static ImmutableMap.Builder<Class<? extends Throwable>,ResultCode> builder =  ImmutableMap.builder();   
   //捕获Exception异常  
   @ResponseBody   
  @ExceptionHandler(Exception.class)   
  public ResponseResult exception(Exception e) {   
     LOGGER.error("catch exception : {}\r\nexception: ",e.getMessage(), e);   
     if(EXCEPTIONS == null)      
      EXCEPTIONS = builder.build();   
      final ResultCode resultCode = EXCEPTIONS.get(e.getClass());     
    final ResponseResult responseResult;     
    if (resultCode != null) {      
       responseResult = new ResponseResult(resultCode);   
     } else {      
       responseResult = new ResponseResult(CommonCode.SERVER_ERROR);   
     }      
   return responseResult;   
}     
  //捕获 CustomException异常
    @ExceptionHandler(CustomException.class)   
  @ResponseBody   
  public ResponseResult customException(CustomException e) {  
       LOGGER.error("catch exception : {}\r\nexception: ",e.getMessage(), e);   
     ResultCode resultCode = e.getResultCode();   
     ResponseResult responseResult = new ResponseResult(resultCode);     
      return responseResult;
    }

[AppleScript] 纯文本查看 复制代码
static{   
      //在这里加入一些基础的异常类型判断   
     builder.put(HttpMessageNotReadableException.class,CommonCode.INVALIDPARAM);
    }
}

5.4.3 异常处理测试
仍然模拟“问题测试”中的测试步骤,异常结果为“非法参数”。
  6 实战
此部分为自学内容,根据今天所学知识完成下边的任务。 6.1 查询条件完善
页面查询条件增加:页面名称、页面类型。
页面名称对应CmsPage模型类中的pageName属性。 页面类型对应CmsPage模型类中的pageType属性。
查询要求:
页面名称:模糊查询
页面类型:精确匹配,页面类型包括:静态和动态,在数据库中静态用“0”表示,动态用“1”表示。 6.2 页面属性增加DataUrl
在CmsPage.java模型类型中有一个dataUrl属性,此属性在页面静态化时需要填写。
本需求要求:
1、在新增页面增加dataUrl输入框,并支持添加。 2、在修改页面增加dataUrl输入框,并支持修改。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2