1.RESTful风格

  1. 什么是RESTful风格?

    • REST是REpressentational State Transfer的缩写,中文翻译为表述性状态转移,REST是一种体系结构,而HTTP是一种包含了REST架构属性的协议,为了便于理解,我们把它的首字母拆分成不同的几个部分:

      • 表述性(REpressentational):REST资源实际上可以用各种形式来进行表述,包括XML、JSON、甚至HTML——最适合资源使用者的任意形式;
      • 状态(State):当时用REST的时候,我们更关注资源的状态而不是对资源采取的行为;
      • 转义(Transfer):REST涉及到转义资源数据,它以某种表述性形式从一个应用转移到另一个应用

    简单的说,REST就是将资源的状态以适合客户端或服务端的形式从服务端转移到客户端(或者反过来)。在REST中,资源通过URL进行识别和定位,然后通过行为(即HTTP方法)来定义REST来完成怎样的功能。

  2. 实例说明

    1. 在平时Web开发中,表单中method属性常用的值是GET和POST,但是实际上,HTTP方法还有PATCH、DELETE、PUT等其他值,这些方法通常会匹配如下的CRUD动作:

      CRUD动作 HTTP方法
      Create(增) POST
      Select(查) GET
      Update(改) PUT或PATCH
      Delete(删) DELETE

      在使用RESTful风格之前,我们增加一条商品数据是这样的:

      /addProduct?name=xxx

      但是使用了RESTful风格之后就会变成:

      /product

      这就变成了使用同一个URL,通过约定不同的HTTP方法来实施不同的业务,这就是RESTful风格所做的事

用户User的实体类

  1. package com.alibaba.wlq.bean;
  2. public class User {
  3. @Override
  4. public String toString() {
  5. return "User [account=" + account + ", password=" + password + ", phone=" + phone + "]";
  6. }
  7. private String account;
  8. private String password;
  9. private String phone;
  10. public String getPhone() {
  11. return phone;
  12. }
  13. public void setPhone(String phone) {
  14. this.phone = phone;
  15. }
  16. public User(String account, String password, String phone) {
  17. super();
  18. this.account = account;
  19. this.password = password;
  20. this.phone = phone;
  21. }
  22. public String getAccount() {
  23. return account;
  24. }
  25. public void setAccount(String account) {
  26. this.account = account;
  27. }
  28. public String getPassword() {
  29. return password;
  30. }
  31. public void setPassword(String password) {
  32. this.password = password;
  33. }
  34. public User(String account, String password) {
  35. super();
  36. this.account = account;
  37. this.password = password;
  38. }
  39. public User() {
  40. super();
  41. }
  42. }

Controller控制类

  1. package com.alibaba.wlq.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.PathVariable;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import com.alibaba.wlq.bean.User;
  8. @Controller
  9. @RequestMapping("user")
  10. public class UserController {
  11. //RESTful--->user/1
  12. //method:表示该方法处理get请求
  13. //1赋值给了{uid}了
  14. @RequestMapping(value="{uid}",method=RequestMethod.GET)//查询操作
  15. public String selectById(@PathVariable("uid")int id) {//@PathVariable:把uid的值赋值给形参id
  16. System.out.println("id====="+id);
  17. return "index";
  18. }
  19. @RequestMapping(value="{uid}",method=RequestMethod.POST)//添加操作
  20. public String addUser(@PathVariable("uid")int id,User user) {
  21. System.out.println(user);
  22. System.out.println("id====="+id);
  23. return "index";
  24. }
  25. //SpringMVC提供了一个过滤器,该过滤器可以把post请求转化为put和delete请求
  26. @RequestMapping(method=RequestMethod.PUT)//修改操作
  27. @ResponseBody
  28. public String updateUser(User user) {
  29. System.out.println(user+"======update");
  30. return "index";
  31. }
  32. @RequestMapping(value="{id}",method=RequestMethod.DELETE)//删除操作
  33. @ResponseBody
  34. public String deleteById(@PathVariable int id) {
  35. System.out.println(id+"=====delete");
  36. return "index";
  37. }
  38. }

在web.xml配置文件中配置过滤器

  1. <!-- 把post请求转化为put和delete请求
  2. 使用_method表示真正的提交方式 -->
  3. <filter>
  4. <filter-name>hiddenHttpMethodFilter</filter-name>
  5. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  6. </filter>
  7. <filter-mapping>
  8. <filter-name>hiddenHttpMethodFilter</filter-name>
  9. <url-pattern>/*</url-pattern>
  10. </filter-mapping>

index界面

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>Insert title here</title>
  8. <script type="text/javascript" src="/9.5springmvcdemo/js/jquery-3.2.1.min.js"></script>
  9. <script type="text/javascript">
  10. $.ajax({
  11. url:"../user",
  12. type:"POST",
  13. data:{
  14. _method:"PUT",
  15. "account":"zhangsan",
  16. "password":"123456",
  17. "phone":"18360917652"
  18. },
  19. success:function(result){
  20. alert(result);
  21. }
  22. });
  23. </script>
  24. </head>
  25. <body>
  26. index界面
  27. </body>
  28. </html>

2.异常处理

  1. 全局异常处理

    1. package com.alibaba.wlq.controller;
    2. import org.springframework.web.bind.annotation.ControllerAdvice;
    3. import org.springframework.web.bind.annotation.ExceptionHandler;
    4. import org.springframework.web.servlet.ModelAndView;
    5. @ControllerAdvice
    6. public class ExceptionController {
    7. @ExceptionHandler
    8. public ModelAndView error(Exception exception) {
    9. ModelAndView mv = new ModelAndView();
    10. mv.addObject("error",exception.getMessage());
    11. mv.setViewName("error");
    12. return mv;
    13. }
    14. }

3.Spring框架

Spring是一个开源框架

  1. 加入jar包

  2. 加入配置文件

RESTful风格、异常处理、Spring框架的更多相关文章

  1. RESTful风格的SSM框架搭建

    1 使用idea编辑工具,maven项目构建工具搭建RESTful风格的java项目 2 进行项目配置 2.1 pom文件依赖 <project xmlns="http://maven ...

  2. Spring框架系列(5) - 深入浅出SpringMVC请求流程和案例

    前文我们介绍了Spring框架和Spring框架中最为重要的两个技术点(IOC和AOP),那我们如何更好的构建上层的应用呢(比如web 应用),这便是SpringMVC:Spring MVC是Spri ...

  3. RestFul风格API(Swagger)--从零开始Swagger

    引言:随着技术的革新,现在的系统基本上都是前后端分离,并且在各自的道路上越走越远,而前后端之间通信或者联系的桥梁就是API,而这里基于RESTful风格的API框架就来了!欲知后事如何,客官别急,往下 ...

  4. spring boot 2 全局统一返回RESTful风格数据、统一异常处理

    全局统一返回RESTful风格数据,主要是实现ResponseBodyAdvice接口的方法,对返回值在输出之前进行修改.使用注解@RestControllerAdvice拦截异常并统一处理. 开发环 ...

  5. RESTful风格的Web服务框架:Swagger

    Swagger与SpringMVC项目整合 为了方便的管理项目中API接口,在网上找了好多关于API接口管理的资料,感觉目前最流行的莫过于Swagger了,功能强大,UI界面漂亮,并且支持在线测试等等 ...

  6. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  7. Spring Boot 中 10 行代码构建 RESTful 风格应用

    RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 ...

  8. Spring Boot2 系列教程(三十一)Spring Boot 构建 RESTful 风格应用

    RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 ...

  9. Spring Boot构建 RESTful 风格应用

    Spring Boot构建 RESTful 风格应用 1.Spring Boot构建 RESTful 风格应用 1.1 实战 1.1.1 创建工程 1.1.2 构建实体类 1.1.4 查询定制 1.1 ...

随机推荐

  1. mini-web框架-装饰器-总结1(5.3.1)

    @ 目录 1.说明 2.代码 关于作者 1.说明 原则:开放封闭 可以扩展,但是不可以修改.也就是说软件对扩展开放,对修改关闭. 运用技术:闭包 一共两种方法,一个使用闭包,一个使用类 使用多个装饰器 ...

  2. 服务器安装ESXI6.7

    1    从官网下载ESXI镜像文件到本地 https://my.vmware.com/web/vmware/details?downloadGroup=ESXI670&productId=7 ...

  3. NET 5 依赖注入多个服务实现类

    依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来. 服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了 ...

  4. asp.net url参数中有中文request.querystring 乱码

    说明: 从这点我们发现:所有的参数输入,都调用了一次:HttpUtility.UrlDecode(str2, encoding); 结论出来了: 当客户端js对中文以utf-8编码提交到服务端时,用R ...

  5. 建议收藏!利用Spring解决循环依赖,深入源码给你讲明白!

    前置知识 只有单例模式下的bean会通过三级缓存提前暴露来解决循环依赖的问题.而非单例的bean每次获取都会重新创建,并不会放入三级缓存,所以多实例的bean循环依赖问题不能解决. 首先需要明白处于各 ...

  6. eclipse中安装Springboot的插件

    1help在Eclipse Marketplace中搜索spring-tool-suite,点击install,然后接受协议,等待重启eclipse即可

  7. 超长JVM总结,面试必备

    什么是JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的交互. ...

  8. 转【深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接】

    转自:https://www.jb51.net/article/39432.htm 1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     ...

  9. C# 使用 log4net 日志组件

    一. 什么是 log4net  Apache log4net 库是帮助程序员将日志语句输出到各种输出目标的工具,它是从Java中的Log4j迁移过来的一个.Net版的开源日志框架.log4net 的一 ...

  10. go语言的下载、安装、配置

    一.下载 Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin) Windows 安装包下载地址为:https://golang.org/dl/. 如果打不开可 ...