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注解:
1@Controller:标注该类为控制层类
2.@RequestMapping:标注请求的地址
3.@ResponseBody:把java对象转化为json对象
4.@Valid:标注校验该数据
5.@PathVariable:接收uri地址的值赋值给参数
6.@SessionAttributes:保存到Session中
7.@RequestParam:接收参数若参数名不同可用,当没传参数值时可设置默认值
8.@ExceptionAdivice:标注一个类为异常处理类
9.@EcceptionHandler:标注一个方法为异常处理方法
10.@InitBinder:时间参数处理格式
SpringMVC学习五(resultful风格/异常处理/注解)的更多相关文章
- (转)SpringMVC学习(五)——SpringMVC的参数绑定
http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...
- springMVC 学习 五 参数传递(包括restful风格)
(一)SpringMVC Controller接受参数的方式 (1) 前端传递的参数,在springMVC的controller中使用基本数据类型或者String 类型进行接受 在前端有一个form表 ...
- SpringMVC学习(三)——基于注解配置的springMVC项目
可运行的附件地址:http://files.cnblogs.com/files/douJiangYouTiao888/springWithAnnotation.zip 项目说明: 作者环境:maven ...
- SpringMVC学习笔记-REST风格请求实现
RESTful概念及功能 RESTful的概念:RESTful是 一种资源定位及资源操作的风格,其本身既不是标准也不是协议,而是一种设计风格,可以使得软件整体层次更加分明.代码更加简洁,并且有利于实现 ...
- SpringMVC学习笔记二:常用注解
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6831976.html 参考:http://www.cnblogs.com/leskang/p/5445698 ...
- SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理
SpringMVC的异常处理,SimpleMappingExceptionResolver只能简单的处理异常 当发生异常的时候,根据发生的异常类型跳转到指定的页面来显示异常信息 ExceptionCo ...
- SpringMVC学习(六)——@InitBinder注解
有些类型的数据是无法自动转换的,比如请求参数中包含时间类型的数据,无法自动映射到Controller里的Date参数.需要使用@initBinder注解为binder提供一个数据的转换器,这个转换器可 ...
- springMVC学习五(转发和乱码)
摘录http://www.cnblogs.com/xdp-gacl/p/3798347.html http://www.cnblogs.com/xdp-gacl/p/3798347.html 四个很重 ...
- (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解
http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...
- SpringMVC学习笔记 - 第二章 - SSM整合案例 - 技术整合、统一结果封装、统一异常处理、前后联调、拦截器
[前置内容]Spring 学习笔记全系列传送门: Spring学习笔记 - 第一章 - IoC(控制反转).IoC容器.Bean的实例化与生命周期.DI(依赖注入) Spring学习笔记 - 第二章 ...
随机推荐
- #线段树,欧拉函数#CF1114F Please, another Queries on Array?
题目 给一个长度为\(n\)的数组\(a\),\(q\)次询问 支持区间乘\(x\)以及求\(\varphi(\prod_{i=l}^ra_i)\) \(n\leq 4*10^5,q\leq 2*10 ...
- #主席树,离散,扫描线#洛谷 3168 [CQOI2015]任务查询系统
题目 分析 询问显然得预处理,考虑以优先级建权值线段树, 将优先级离散化处理,那么第\(k\)大可以用线段树来求 那任务怎么办,考虑时间用扫描线的方法,按照时间建新的线段树 把任务分成两部分,在两端差 ...
- 基于OpenHarmony的智能金属探测器
一.简介 智能金属探测器是基于 OpenAtom OpenHarmony(以下简称"OpenHarmony")操作系统,利用电磁感应原理来探测周围的金属物体.该样例采用多设备协同 ...
- C#针对 private Dictionary<String, String> list说明
- Linux:vscode扩展无法下载,报错:Error while fetching extensions : XHR failed
在Linux系统上下载安装好vscode以后,发现扩展里面无法下载安装,报错:Error while fetching extensions : XHR failed 解决办法:修改 hosts 文件 ...
- 如何通过 kubectl 进入 node shell
概述 假设这样一个场景: 生产环境中,Node 都需要通过堡垒机登录,但是 kubectl 是可以直接在个人电脑上登录的. 这种场景下,我想要通过 kubectl 登录到 K8S 集群里的 Node, ...
- HDC2021技术分论坛:盘点分布式软总线数据传输技术中的黑科技
作者:houweibo,软总线首席技术专家:lidonghua,软总线技术专家 随着万物互联时代的到来,特别是大量媒体资源的涌入和使用,用户对传输的要求不断提高,怎样的传输技术才能满足未来的用户需求呢 ...
- Spring Cloud组件之 Spring Cloud Ribbon:负载均衡的服务调用
Spring Cloud Ribbon:负载均衡的服务调用 SpringCloud学习教程 SpringCloud Spring Cloud Ribbon 是Spring Cloud Netflix ...
- CentOS 6.5 LAMP分主机平台的搭建及测试
CentOS 6.5 LAMP分主机平台的搭建及测试 看似非常之完备,转来抽空测试学习 原文地址:http://www.it165.net/os/html/201403/7595.html 前言 ...
- android 关于插件包内的依赖版本不一致问题得解决
前言 今天使用一个插件包的时候,依赖包冲突了,在此记录一下. 正文 在引用一个: debugImplementation 'com.squareup.leakcanary:leakcanary-and ...