一,什么是RESTful

RESTful(RESTful Web Services)一种架构风格,表述性状态转移,它不是一个软件,也不是一个标准,而是一种思想,不依赖于任何通信协议,但是开发时要成功映射到某协议时也需要遵循其标准,但不包含对通信协议的更改

特征:

1.通过url地址来标识资源,系统中的每个对象或资源都可以通过其url地址来获取

2.统一接口,显式地使用HTTP方法,来进行crud(create,update,insert,delete)映射

创建资源使用POST

更新资源使用PUT

检索资源使用GET

删除资源使用DELETE

3.资源多重反映.通过url地址访问的每个资源都可以根据客户端的规定进行返回,例:JSON,XML

RESTful服务适用web应用中创建服务的API,将资源以JSON或XML等数据格式进行暴露,从而可以更方便的让客户端进行调用

二.基于SpringMVC的RESTful服务

在SpringMVC中对RESTful支持,主要通过注解来实现

@Controller:声明一个处理请求的控制器

@RequestMapping:请求映射地址到对应的方法,该注解又可以分为一下几种类型:

@GetMapping

@PostMpping

@PutMapping

@DeleteMapping

@PatchMapping

@ResponsrBody:响应内容转换为JSON格式

@RequestBody:请求内容转换为JSON格式

@RestContrller:等同@Controller+@ResponsrBody

前台跳转代码参考如下所示:

<%–

Created by IntelliJ IDEA.

User: qyq

Date: 2022/2/21

Time: 19:25

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

Title

<a href="user/findUser/lisi">测试</a>
<form action="emp" method="post">
账户:<input name="name" id="name" ><br/>
编号:<input name="id" id="id"><br/>
<button type="submit">登录</button>
</form>

<form action="emp/1" method="post">
<input name="_method" value="delete">
<input type="submit" value="删除一号图书" >
</form>
<form action="emp/1" method="post">
<input name="_method" value="put">
<input type="submit" value="更新一号图书" >
</form>

复制 Emp实体类参考如下所示:

package com.aaa.entity;

import lombok.AllArgsConstructor;

import lombok.Data;

import org.springframework.stereotype.Component;

@Data

@AllArgsConstructor

@Component

public class Emp {

private Integer id;

private String name;

}

复制

控制器EmpController参考如下:

package com.aaa.controller;

import com.aaa.entity.Emp;

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 org.springframework.web.servlet.ModelAndView;

import java.util.ArrayList;

import java.util.List;

@Controller

public class EmpController {

@RequestMapping(value = “/emp”,method = RequestMethod.GET)

public ModelAndView getAllEmps(){

ModelAndView mv=new ModelAndView();

List empList=new ArrayList();

empList.add(new Emp(1,“张三”));

empList.add(new Emp(2,“李四”));

mv.addObject(“emps”,empList);

mv.setViewName(“emplist”);

return mv;

}

@RequestMapping(value = “/emp/{id}”,method = RequestMethod.DELETE)

@ResponseBody

public String deleteEmp(@PathVariable(“id”)Integer id){

System.out.println(“调用service层业务…”);

return “emplist”;

}

@RequestMapping(value = “/emp”,method = RequestMethod.POST)

public String addEmp(Emp emp){
System.out.println("增加数据...");
return "emplist";
}
@RequestMapping(value = "/emp/{id}",method = RequestMethod.PUT)
@ResponseBody
public String editEmp(@PathVariable Integer id) {
System.out.println("编辑数据");
return "emplist";
}

}

复制

针对PUT和DELETE操作可能会出问题,需要在web.xml中进行配置

<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>