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 .

相关文章
|
XML 前端开发 JavaScript
Spring MVC应用的开发步骤
Spring MVC应用的开发步骤
126 0
|
23天前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
53 2
|
JSON 前端开发 Java
构建健壮的Spring MVC应用:JSON响应与异常处理
构建健壮的Spring MVC应用:JSON响应与异常处理
67 0
|
7月前
|
前端开发 Java Spring
参数解密:揭示Spring MVC请求参数处理的实际应用指南
参数解密:揭示Spring MVC请求参数处理的实际应用指南
58 1
|
7月前
|
前端开发 Java 数据库
【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解
【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解
|
Java 数据库 数据安全/隐私保护
SpringMVC中@ModelAttribute应用实践
SpringMVC中@ModelAttribute应用实践
80 2
|
存储 JSON Java
SpringMVC应用
SpringMVC应用
62 0
|
Java Apache Maven
Tiles与SpringMVC整合应用实践
Tiles与SpringMVC整合应用实践
109 0
|
自然语言处理 前端开发 Java
SpringMVC中form标签与数据绑定应用实践
SpringMVC中form标签与数据绑定应用实践
102 0
|
Java 数据库连接 Maven
SpringMvc 之crud增删改查应用
SpringMvc 之crud增删改查应用
62 0