• 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风格/异常处理/注解)的更多相关文章

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

    http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...

  2. springMVC 学习 五 参数传递(包括restful风格)

    (一)SpringMVC Controller接受参数的方式 (1) 前端传递的参数,在springMVC的controller中使用基本数据类型或者String 类型进行接受 在前端有一个form表 ...

  3. SpringMVC学习(三)——基于注解配置的springMVC项目

    可运行的附件地址:http://files.cnblogs.com/files/douJiangYouTiao888/springWithAnnotation.zip 项目说明: 作者环境:maven ...

  4. SpringMVC学习笔记-REST风格请求实现

    RESTful概念及功能 RESTful的概念:RESTful是 一种资源定位及资源操作的风格,其本身既不是标准也不是协议,而是一种设计风格,可以使得软件整体层次更加分明.代码更加简洁,并且有利于实现 ...

  5. SpringMVC学习笔记二:常用注解

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6831976.html  参考:http://www.cnblogs.com/leskang/p/5445698 ...

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

    SpringMVC的异常处理,SimpleMappingExceptionResolver只能简单的处理异常 当发生异常的时候,根据发生的异常类型跳转到指定的页面来显示异常信息 ExceptionCo ...

  7. SpringMVC学习(六)——@InitBinder注解

    有些类型的数据是无法自动转换的,比如请求参数中包含时间类型的数据,无法自动映射到Controller里的Date参数.需要使用@initBinder注解为binder提供一个数据的转换器,这个转换器可 ...

  8. springMVC学习五(转发和乱码)

    摘录http://www.cnblogs.com/xdp-gacl/p/3798347.html http://www.cnblogs.com/xdp-gacl/p/3798347.html 四个很重 ...

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

    http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...

  10. SpringMVC学习笔记 - 第二章 - SSM整合案例 - 技术整合、统一结果封装、统一异常处理、前后联调、拦截器

    [前置内容]Spring 学习笔记全系列传送门: Spring学习笔记 - 第一章 - IoC(控制反转).IoC容器.Bean的实例化与生命周期.DI(依赖注入) Spring学习笔记 - 第二章 ...

随机推荐

  1. Loto实践干货(3) 测量CAN总线通讯数据

    Loto实践干货(3) 测量CAN总线通讯数据 最近在做运动控制卡的项目,调试样机的过程中,需要验证CAN总线通讯功能的正确性.以前只限于理论上认识CAN总线,使用的CANbus的通讯卡也是有上位机例 ...

  2. KingbaseES V8R6备份恢复案例之---备份crond计划任务的调整

    案例说明: 在KingbaseES V8R6数据库通常备份建立的crond任务,默认由root用户建立,写入到/etc/cron.d/KINGBASECRON文件中,在有的生产环境限制了普通用户使用r ...

  3. OpenHarmony Meetup北京站招募令

    OpenHarmony Meetup城市巡回北京站火热来袭!!日期:2023年11月25日14:00地点:中国科学院软件园区五号楼B402与OpenHarmony技术大咖近距离互动,分享技术见解,结交 ...

  4. 全面的开发者文档和用户目标解析:API 文档指南和开发者旅程

    开发者文档 开发者文档,也称为 API 文档,是一种专门针对软件开发人员的技术写作形式.这种类型的文档通常包括 API 的技术规范.代码注释.软件设计和架构以及软件开发中涉及的其他详细技术描述.开发者 ...

  5. Numpy结构化数组

    Numpy结构化数组 Numpy的结构化数组和记录数组为复合的.异构的的数据提供了非常有效的存储. 结构化数组 In [1]: import numpy as np In [2]: name = [' ...

  6. 携手HMS Core统一扫码服务, 兴业证券优理宝App提升用户扫码体验

    兴业证券优理宝App联合华为HMS Core,集成HMS Core统一扫码服务,在提升扫码成功率的同时,还支持C端用户用手机端APP扫描手表端二维码,实现行情在手机与手表间跨终端流转,行情信息,抬腕可 ...

  7. 虚实相生,构建数智生活|HMS Core. Sparkle应用创新分论坛报名启动

    XR技术的发展,为用户带来了全新的体验模式.那么,作为支撑XR发展主要学科之一的图形学,将迎来哪些发展新机遇?移动应用开发者,该如何拥抱3D数字化转型? 7月15日,HDD·HMS Core. Spa ...

  8. 看不懂来打我,vue3如何将template编译成render函数

    前言 在之前的 通过debug搞清楚.vue文件怎么变成.js文件 文章中我们讲过了vue文件是如何编译成js文件,通过那篇文章我们知道了,template编译为render函数底层就是调用了@vue ...

  9. c# 属性类(特性)

    前言 c# 属性类也称做特性.这是一篇垫文,为后面的过滤器和其他特性类的东西做铺垫. 正文 看一段代码: static void Main(string[] args) { Attribitefunc ...

  10. IIS 加载32dll失败

    前言 遇到一个这样的问题,因为在一个项目中是32位的,至于为什么是32位的呢,因为调用的都是老库,32位的,部署到iis出现错误如下: Server Error in '/' Application. ...