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的实体类

package com.alibaba.wlq.bean;

public class User {
@Override
public String toString() {
return "User [account=" + account + ", password=" + password + ", phone=" + phone + "]";
} private String account;
private String password;
private String phone; public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} public User(String account, String password, String phone) {
super();
this.account = account;
this.password = password;
this.phone = phone;
} public String getAccount() {
return account;
} public void setAccount(String account) {
this.account = account;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public User(String account, String password) {
super();
this.account = account;
this.password = password;
} public User() {
super();
} }

Controller控制类

package com.alibaba.wlq.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.wlq.bean.User;
@Controller
@RequestMapping("user")
public class UserController {
//RESTful--->user/1
//method:表示该方法处理get请求
//1赋值给了{uid}了
@RequestMapping(value="{uid}",method=RequestMethod.GET)//查询操作
public String selectById(@PathVariable("uid")int id) {//@PathVariable:把uid的值赋值给形参id
System.out.println("id====="+id);
return "index";
}
@RequestMapping(value="{uid}",method=RequestMethod.POST)//添加操作
public String addUser(@PathVariable("uid")int id,User user) {
System.out.println(user);
System.out.println("id====="+id);
return "index";
}
//SpringMVC提供了一个过滤器,该过滤器可以把post请求转化为put和delete请求
@RequestMapping(method=RequestMethod.PUT)//修改操作
@ResponseBody
public String updateUser(User user) {
System.out.println(user+"======update");
return "index";
}
@RequestMapping(value="{id}",method=RequestMethod.DELETE)//删除操作
@ResponseBody
public String deleteById(@PathVariable int id) {
System.out.println(id+"=====delete");
return "index";
}
}

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

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

index界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="/9.5springmvcdemo/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$.ajax({
url:"../user",
type:"POST",
data:{
_method:"PUT",
"account":"zhangsan",
"password":"123456",
"phone":"18360917652"
},
success:function(result){
alert(result);
}
}); </script>
</head>
<body>
index界面
</body>
</html>

2.异常处理

  1. 全局异常处理

    package com.alibaba.wlq.controller;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.servlet.ModelAndView;
    @ControllerAdvice
    public class ExceptionController {
    @ExceptionHandler
    public ModelAndView error(Exception exception) {
    ModelAndView mv = new ModelAndView();
    mv.addObject("error",exception.getMessage());
    mv.setViewName("error");
    return mv;
    }
    }

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. Docker 快速部署 Django项目到云服务器

    项目结构: 1,dockerfile FROM python:3.7 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY pip.conf /roo ...

  2. active mq 简单配置

    ---恢复内容开始--- 在activemq.xml 配置activemq的响应配置: 配置消息持久化: <persistenceAdapter>             <!-- ...

  3. 怎么判断map不为空

    public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...

  4. ArrayList哪种遍历效率最好,你真的弄明白了吗?

    ArrayList简介 声明:以下内容都是基于jdk1.8的 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了 ...

  5. 面试常问:Mybatis使用了哪些设计模式?

    前言 虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式. Mybati ...

  6. Js HTML DOM动画

    基础页面 为了演示如何通过 JavaScript 来创建 html 动画,我们将使用一张简单的网页: 实例 我的第一部 JavaScript 动画 我的动画在这里. 创建动画容器 所有动画都应该与容器 ...

  7. JavaDailyReports10_13

    今天完成了课堂测试二的内容要求,开阔了编程的思路,学到了很多程序设计思想,为以后的学习提供了很多帮助. 明天开始继续完善四则运算的程序,并且开始JavaWeb的学习!

  8. Spring—SSJ集成&声明式事务管理

    1.   课程介绍 1.  SSJ集成;(掌握) 2.  声明式事务管理;(掌握) 什么是三大框架 2.1.  ssh Struts/Struts2 Spring Hibernate 2.2.  ss ...

  9. ES6 class类 静态方法及类的继承

    一.class类 ES6之前都是定义函数以及函数的原型对象实现类型, 如果想要实现共享构造函数成员,可以用prototype来共享实现 ES6出现之后,使用class类的概念来实现原型的继承 二,静态 ...

  10. Docker进行MySQL主从复制操作

    Docker的相关操作 与 Docker下MySQL容器的安装 https://www.cnblogs.com/yumq/p/14253360.html 本次实验我是在单机状态下进行mysql的主从复 ...