SpringMVC学习五(resultful风格/异常处理/注解)

  • resultful风格
  • 异常处理

1.Restfule风格

  Restfule风格是一种软件架构风格,而不是标准,只是提供了一种设计原则和约束条件。主要适用于客户端和服务器端交互的软件。是基于http协议实现。目的是为了提高系统的可伸缩性,降低应用之间的耦合度,方便框架分布式处理程序。基于这个风格的软件可更加的简单、更有层次,更易于实现缓存的机制。
  在resultful风格中,用户请求的url使用同一个URL而用请求方式:get/post/delete/put等方式对请求的处理方法进行区分。这样可以在前后台分离的开发中让前端开发人员不会对请求的资源地址产生混淆,形成一个统一的接口。

使用区别:在http协议中,四个表示操作方式的动词:GET/Post/put/Delete,他们分别对应四种基本操作。Get用来获取资源。post用来新建立资源,也可以更新资源。put用来更新资源。Delete用来删除资源

一般格式如下:

@RequestMapping(value="{id}",method=RequestMethod.GET)
@RequestMapping(value="{id}",method=RequestMethod.POST)
@RequestMapping(value="{id}",method=RequestMethod.DELETE)
@RequestMapping(value="{id}",method=RequestMethod.PUT)

现在controller类中进行使用如下:

 1 @Controller
 2 @RequestMapping("users")
 3 public class UsersController {
 4
 5     @RequestMapping(value="{uid}",method=RequestMethod.GET)//查询
 6     public String fingById(@PathVariable("uid") int id) {
 7         System.out.println("===findbyid===");
 8         int a=10/0;
 9         return "index";
10     }
11
12     @RequestMapping(method=RequestMethod.POST)//添加
13     public String addUsers(Users users) {
14         System.out.println("===addUsers===");
15         System.out.println(users);
16         return "index";
17     }
18
19     @RequestMapping(method=RequestMethod.PUT)//修改
20     @ResponseBody
21     public String updateUsers(Users users) {
22         System.out.println("===updateUsers===");
23         System.out.println(users);
24         return "index";
25     }
26
27     @RequestMapping(value="{id}", method=RequestMethod.DELETE)//删除
28     @ResponseBody
29     public String delete(@PathVariable int id) {
30         System.out.println(id+"===delete===");
31         return "index";
32     }
33 }

编写完成后进行测试,在这里我们用一个google的插件进行测试,可以选择提交方式等十分的方便

测试GET和POST均通过,显示200状态码(通过)

而对于其中的PUT和DELETE我们在测试时发现并不能正确通过

因为浏览器端只可通过GET和POST,所以我们需要在测试时添加属性_method=PUT/_method=DELETE,对应的需要在配置文件中加入一个过滤器【HiddenHttpMethodFilter】这个过滤器的作用是将POST提交的_method=PUT/_method=DELETE通过转化为PUT/DELETE

1   <filter>
2       <filter-name>hiddenHttpMethodFilter</filter-name>
3       <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
4   </filter>
5   <filter-mapping>
6       <filter-name>hiddenHttpMethodFilter</filter-name>
7       <url-pattern>/*</url-pattern>
8   </filter-mapping>

至此测试通过如下

 2.异常处理

在上面的controller类中大家可能发现有一个地方会出错,抛出异常即int a=10/0,我们现在进行处理;

1 @RequestMapping(value="{uid}",method=RequestMethod.GET)//查询
2 public String fingById(@PathVariable("uid") int id) {
3     System.out.println("===findbyid===");
4     int a=10/0;//抛出异常
5     return "index";
6 }

对于此异常有两种处理方式,实际算是一种吧,看个人理解

第一种:在本类中加入以下代码

//该类中发生异常时由该方法来处理
    @ExceptionHandler
    public ModelAndView error(Exception exception) {
        ModelAndView mv=new ModelAndView();
        mv.addObject("error", exception.getMessage());
        mv.setViewName("error");
        return mv;
    }

当该类中发生异常时由该方法来处理,对应的可以在前端页面进行接收这个错误信

第二种:新建一个类,用来接收获得的所有的异常,以此避免在每一个类中进行异常处理

 1 @ControllerAdvice
 2 public class ExceptionController {
 3
 4     //该类中发生异常时由该类来处理
 5         @ExceptionHandler
 6         public ModelAndView error(Exception exception) {
 7             ModelAndView mv=new ModelAndView();
 8             mv.addObject("error", exception.getMessage());
 9             mv.setViewName("error");
10             return mv;
11         }
12 }

前端页面代码,其中需加入isErrorPage="true"属性,意思是此页面为错误信息显示页面,我们再次接收错误信息,当处理了上面的异常后跳出到这里显示

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8" isErrorPage="true"%>
 3 <!DOCTYPE html>
 4 <html>
 5 <head>
 6 <meta charset="UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     ${error }
11 </body>
12 </html>

测试结果,成功显示异常信息:

 Tips(SpringMVC部分注解)

SpringMVC注解:

[email protected]:标注该类为控制层类

[email protected]:标注请求的地址

[email protected]:把java对象转化为json对象

[email protected]:标注校验该数据

[email protected]:接收uri地址的值赋值给参数

[email protected]:保存到Session中

[email protected]:接收参数若参数名不同可用,当没传参数值时可设置默认值

[email protected]:标注一个类为异常处理类

[email protected]:标注一个方法为异常处理方法

[email protected]:时间参数处理格式

原文地址:https://www.cnblogs.com/murmansk/p/11469752.html

时间: 2024-11-05 21:56:33

SpringMVC学习五(resultful风格/异常处理/注解)的相关文章

SpringMVC学习(五)——SpringMVC的参数绑定

SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案例代码的编写均建立在前文SpringMVC学习(四)——Spring.MyBatis和SpringMVC的整合的案例基础之上,因此希望读者能仔细阅读这篇文章. 默认支持的数据类型 现在有这样一个需求:打开商品编辑页面,展示商品信息.这是我对这个需求的分析:编辑商品信息,需要根据商品id查询商品信息,然后展示到页面.我这里假设请求的url为/itemEdit.action,由于我想要根据商品id查询商品信息,所以需要传

SpringMVC学习(五)

AJAX 1.AJAX简介 AJAX = Asynchronous JavaScript and XML(异步的JavaScript 和 XML): AJAX不是新的编程语言,而是一种使用现有标准的新方法: AJAX最大的优点式在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容: AJAX不需要任何浏览器插件,但是需要用户允许JavaScript在浏览器上执行. 传统的网页(即不用ajax技术的网页),想要更新内容或者提交一个表单,都需要加载整个网页 使用ajax技术的网页,通

SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理

SpringMVC的异常处理,SimpleMappingExceptionResolver只能简单的处理异常 当发生异常的时候,根据发生的异常类型跳转到指定的页面来显示异常信息 ExceptionController.java 处理器 package com.orange.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.Requ

SpringMVC学习笔记二:常用注解

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6831976.html  一.用于定义类的注解:@Controller @Controller 用于标记在一个类上,使用它标记的类就是一个Controller 对象. DispatcherServlet将会扫描使用了该注解的类的方法,并检测方法是否使用了@RequestMapping 注解.@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器

SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编写均建立在前文SpringMVC学习(五)——SpringMVC的参数绑定的案例基础之上,因此希望读者能仔细阅读这篇文章. 绑定数组 现有这样一个需求:在商品列表页面选中多个商品,然后删除之.下面是我对该需求的分析:此功能要求商品列表页面中的每个商品前有一个checkbook(复选框),选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id批量删除商品信息. 首先将itemList.jsp页面改

SpringMVC学习系列(10) 之 异常处理

在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的.那么如何保证我们处理异常的代码精简且便于维护呢?这就是本篇要讲的内容->异常处理. 在Spring MVC中我们可以通过以下2中途径来对异常进行集中处理: 一.继承HandlerExceptionResolver接口实现自己的处理方法,如: public class MyHandlerExceptionResolver implements HandlerExceptionRe

springmvc学习笔记--REST API的异常处理

前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出异常, 返回的内容是500+的错误页面, 而不是json内容, 这让移动端的调用方很难处理. 本文主要讲述对于rest api, springmvc对异常的解决处理方案. 系列整理: springmvc学习笔记系列的文章目录: • idea创建springmvc项目 • 面向移动端的REST API

SpringMVC学习系列(9) 之 实现注解式权限验证

对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用servlet中的过滤器Filter来实现.但借助于Spring MVC中的action拦截器我们可以实现注解式的权限验证. 一.首先介绍一下action拦截器: HandlerInterceptor是Spring MVC为我们提供的拦截器接口,来让我们实现自己的处理逻辑,HandlerInterceptor 的内容如下: public interface Handl

【SpringMVC学习03】SpringMVC中注解和非注解方式下的映射器和适配器总结

从上一篇的springmvc入门中已经看到,springmvc.xml中的配置了映射器和适配器,是使用非注解的方式来配置的,这是非注解方式的一种,这里再复习一下: 1. 非注解方式 1.1 处理器适配器 上一节中使用的处理器适配器是:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.即: SimpleControllerHandlerAdapter适配器能执行实现了Controller接口的Handler,所以我