SpringMVC的异常处理和REST风格的实例应用(十三)中

简介: SpringMVC的异常处理和REST风格的实例应用(十三)中

三. 实现 HandlerExceptionResolver 接口,构建全局异常处理器


保留上面写的那些异常类和后端。


三.一 构建全局异常处理器 MyExceptoinResolver


在 com.yjl.resolver 包里面。


public class MyExceptoinResolver implements HandlerExceptionResolver{
  @Override
  public ModelAndView resolveException(HttpServletRequest request,
      HttpServletResponse response, Object object, Exception exception) {
    ModelAndView mv=new ModelAndView();
    mv.addObject("ex",exception);
    //2. 设置默认页面
    mv.setViewName("errors/default");
    //3. 根据异常的类型的所属类,来进行返回不同的提示信息,要取出提示语句。
    String message="";
    if(exception instanceof InputException){
      mv.setViewName("errors/inputError");
      InputException exc=(InputException)exception;
      message=exc.getMessage();
    }else if(exception instanceof DataException){
      mv.setViewName("errors/dataError");
      DataException exc=(DataException)exception;
      message=exc.getMessage();
    }else{
      message="未知错误";
    }
    mv.addObject("message",message);
    return mv;
  }
}


三.二 后端和前端的那几个.jsp 页面保持不变


三.三 springmvc.xml 中配置 全局异常处理器


<mvc:annotation-driven></mvc:annotation-driven>
<bean class="com.yjl.resolver.MyExceptoinResolver"></bean>


三.四 重启服务器,进行验证


与 二.七 显示的结果一样。


上面同样也会跳转,可以自己进行定义,设置信息。 但一般,并不是返回ModelAndView, 而是返回json数据。


三.五 返回JSON 数据


重写 MyExceptoinResolver 里面的 HandlerExceptionResolver 接口里面的方法,采用json返回的形式。


用的是fastjson.jar , 关于json的内容,可以看老蝴蝶前面写的json文章。


  @Override
  public ModelAndView resolveException(HttpServletRequest request,
      HttpServletResponse response, Object object, Exception exception) {
    //有时候,会返回一个JSON字符串。
    Map<String,Object> errorMap=new HashMap<String,Object>();
    //System.out.println("输出值:"+exception.getClass().getSuperclass().getSimpleName());
    errorMap.put("request_state",false);
    errorMap.put("error_code","500");
    errorMap.put("error_exception",exception.getClass().getSimpleName()); 
    try {
      Method method=exception.getClass().getMethod("getMessage");
      errorMap.put("message",method.invoke(exception));
      //json 形式的打印响应
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter write=response.getWriter();
      write.write(JSON.toJSONString(errorMap));
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }


三.六 重启服务器,进行验证


会在页面上打印相应的json数据,即响应 json 字符串。


微信图片_20211228235326.png


微信图片_20211228235342.png


微信图片_20211228235356.png


这就是 SpringMVC的异常的简单的功能。


四. REST


REST 全称是 Representational State Transfer,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。


它进行了三个层面的划分。


1 . 对url 进行规范,要写rest 风格的url


如登录时,以前的url 是: http://localhost:8027/SpringMVC08/user/login.action?name=两个蝴蝶飞&password=1234,

那么写成 url 的风格 便是: http://localhost:8027/SpringMVC08/user/login/两个蝴蝶飞/1234


注意,没有.action


url简洁了, 直接将参数 通过url 传递到了后端。

后端接收参数时,要注意顺序性的接收。


2 . 对http 方法进行规范。


以前HTTP 的方法,常用的是 get 和post, 而get 和post 也没有进行任何区分, 通过在 get 中直接调用 toPost(), 或者是在post 中直接调用 toGet() 方法,

REST 风格,对http 方法进行了扩展。


对数据库的操作 通常是 CRUD, 前端对后端的操作也是 CRUD, 添加,读取,更新,删除。


POST方式, 为插入

GET 方法, 为 查询

PUT 方法, 为 更新

DELETE 方法, 为删除。


3 . 对HTTP 的contentType 文档类型进行了规范。


设置成 json 的格式。


由于 url为REST 风格的,不能在方法中出现 .action,所以需要将 web.xml 中的 DispatcherServlet 地址映射改一下。


以前 url-pattern 为 *.action, 现在改成 /


<!-- 过滤器 -->
  <servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>springMVC</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>


改成了 / 之后,对静态的资源路径也进行了解析, 此时访问 jquery.js 的,是访问不出来的, 将将其当成方法进行处理。 所以,要在springmvc.xml 配置静态资源路径。


<!--静态资源处理-->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
<mvc:resources location="/image/" mapping="/image/**"></mvc:resources>


一般,设置这三个, js,css和image .

相关文章
|
8月前
|
XML 前端开发 JavaScript
Spring MVC应用的开发步骤
Spring MVC应用的开发步骤
100 0
|
8月前
|
JSON 前端开发 Java
构建健壮的Spring MVC应用:JSON响应与异常处理
构建健壮的Spring MVC应用:JSON响应与异常处理
41 0
|
6月前
|
Java 数据库 数据安全/隐私保护
SpringMVC中@ModelAttribute应用实践
SpringMVC中@ModelAttribute应用实践
43 2
|
6月前
|
Java Apache Maven
Tiles与SpringMVC整合应用实践
Tiles与SpringMVC整合应用实践
65 0
|
8月前
|
数据库
“构建高效的SpringMVC增删改查应用“(下)
“构建高效的SpringMVC增删改查应用“
51 0
|
8月前
“构建高效的SpringMVC增删改查应用“(上)
“构建高效的SpringMVC增删改查应用“
32 0
|
11月前
|
设计模式 XML JSON
Spring MVC 深度解析与应用实践(1)
1. 引言 1.1 Spring MVC 概述 Spring MVC(Model-View-Controller)是 Spring 框架的一部分,专门用于设计创建分层的 Java Web 应用。它是一个全功能的 MVC 模块,能够提供强大的配置选项,并利用默认的约定,使基本项目的配置降至最低。Spring MVC 提供了一种分离的方式,使得能够通过控制器(Controller)进行业务处理,模型(Model)进行数据处理,视图(View)进行展示处理,这样使得 Web 层的开发变得更加简洁明了。
4890 1
Spring MVC 深度解析与应用实践(1)
|
XML 前端开发 Java
【Spring MVC 系列】异常处理,为你的应用加层防护
概述 异常处理是几乎所有编程语言都具有的特性,主要是处理程序运行时的非预期行为,保证程序的健壮性。JVM 运行时如果遇到未经处理的异常线程将意外退出,为了避免这种情况需要为线程设置默认的异常处理器。
170 0
【Spring MVC 系列】异常处理,为你的应用加层防护
|
前端开发 JavaScript Java
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(下)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(下)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(下)
|
JSON 前端开发 Java
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(中)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(中)
ContentNegotiation内容协商机制(三)---在视图View上的应用:ContentNegotiatingViewResolver深度解析【享学Spring MVC】(中)