• 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. RabbitMQ 6种模式的练习,以及知识梳理

    常用的模式有Simple.Work.Fanout.Direct.Topic.Headers,可以通过设置交换机类型和配置参数来实现各个模式 简单模式(Simple) 工作模式(Work) 工作模式是考 ...

  2. 记打包的2个错误-项目BotBattle

    目录 记打包项目的 2 个错误 0.概述 1.spring-boot-maven-plugin 版本 1.1 问题 1.2 添加版本号 2.总项目 2.1 问题 2.2 核验主类 2.3backend ...

  3. 使用OHOS SDK构建benchmark

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/google/bench ...

  4. 直播预告丨 OpenHarmony 标准系统多媒体子系统之相机解读

    5 月 26日(周四)晚上 19 点,OpenHarmony 开源开发者成长计划知识赋能第五期"掌握 OpenHarmony 多媒体的框架原理"的第六节直播课,即将开播! 深开鸿资 ...

  5. Java ArrayList 与 LinkedList 的灵活选择

    Java ArrayList Java ArrayList 类是一个可变大小的数组,位于 java.util 包中. 创建 ArrayList import java.util.ArrayList; ...

  6. MOGDB/openGauss索引推荐及虚拟索引

    MOGDB/openGauss 索引推荐及虚拟索引 索引推荐 在 ORACLE 的优化中,可能大家有接触过 SQL Tuning Advisor(SQL 调优顾问,STA),类似的 MOGDB/ope ...

  7. 在HarmonyOS上实现ArkTS与H5的交互

      介绍 本篇Codelab主要介绍H5如何调用原生侧相关功能,并在回调中获取执行结果.以"获取通讯录"为示例分步讲解JSBridge桥接的实现. 相关概念 Web组件:提供具有网 ...

  8. centos 6.4下fdisk分区、格式化、挂载新硬盘

    centos 6.4下fdisk分区.格式化.挂载新硬盘 作者: cat 日期: 2013 年 9 月 10 日 发表评论 (0) 查看评论 1.# fdisk -l 查看当前磁盘信息,就会发现最下面 ...

  9. nginx重新整理——————http请求的11个阶段中的access阶段[十五]

    前言 简单介绍一下access 阶段. 正文 限制某些ip地址的访问权限: syntax: allow address| CIDR|unix:|all; defuat: - context: http ...

  10. asp .net core 单页应用

    前言 单页应用其实就是 asp.net core 来作为js service,个人觉得这样更好调试,这种比较适合中小型业务. 正文 因为自己写过混合app是ionic,那么就尝试一下angular的单 ...