什么是restful风格
- Restful就是一个资源定位及资源操作的风格
- 不是标准也不是协议,只是一种风格
- 基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制
restful对http的诠释
1.资源定位
通过url定位到资源,不需要修改参数
https://blog.csdn.net/qq_35537301/article/details/82469180
url中没有参数,没有后缀
springmvc中:使用 @PathVariable 注解可以从url中取参数
2.资源操作
使用http的方法实现资源的增删改差。put(增)、delete(删)、post(改)、get(查)
实现restful风格
要求
- 首先拦截请求方式:/
- 把参数放在URL中,并且能通过URL中获取参数
获取URL数据
{}
- 占位符:获取URL中的参数;
- 占位符中一定要有参数,参数名随便起,建议通俗易懂
@PathVariable
- 通过URL占位符中获取值
- 把值映射到形参中
- 当占位符中的参数名和形参名一致的话,那么@PathVariable中参数可以省略
注意:
- @PathVariable是获取url上数据的
- @RequestParam获取请求参数的(包括post表单提交)
- 如果加上@ResponseBody注解,就不会走视图解析器,不会返回页面,目前返回的json数据
- 如果不加@ResponseBody,就走视图解析器,返回页面
案例
web.xml文件
<!-- 配置SrpingMVC的前端控制器 -->
<servlet>
<servlet-name>ssm</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ssm</servlet-name>
<!-- 拦截所有请求不包括jsp -->
<url-pattern>/</url-pattern>
</servlet-mapping>
package com.itheima.controller;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.itheima.exception.ItemException;
import com.itheima.pojo.Items;
import com.itheima.pojo.QueryVo;
import com.itheima.service.ItenService;
@Controller
public class ItemController {
@Autowired
private ItenService itemService;
@RequestMapping("list")
public String itemList(Model model) {
List<Items> list = itemService.findAllItem();
// 封装数据传给页面
model.addAttribute("itemList", list);
return "itemList";
}
/**
* @MethodName:itemEdit
* @Description:
* @param request
* @param model
* @return
* @throws Exception
*/
@RequestMapping("itemEdit/{itemId}")
public String itemEdit(@PathVariable("itemId") Integer id , Model model) throws Exception {// Model:模型,封装数据传递用的
// 根据商品ID查询商品信息
Items items = itemService.findItemById(id);
if (items == null) {
throw new ItemException("不好意思,没有找到商品");
}
// 封装数据传给页面
model.addAttribute("item", items);
return "editItem";
}
}