博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC~使用RestFul风格和SpringMVC俩种方式接收数据, 对比model、modelMap、modelAndView三种方式数据显示到前端
阅读量:4052 次
发布时间:2019-05-25

本文共 3717 字,大约阅读时间需要 12 分钟。

文章目录

RestFul

  • RestFul就是资源定位一级资源操作的一种风格, 不是标准也不是协议,基于这个风格使软件设计更加简便,更有层次,更易于实现缓存等机制
  • 功能
    传统方式操作资源 :通过不同的参数来实现不同的效果!方法单一,post 和 get
http://127.0.0.1/item/queryItem.action?id=1 查询,GEThttp://127.0.0.1/item/saveItem.action 新增,POST

使用RESTful操作资源 :可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同!

http://127.0.0.1/item/1 查询,GEThttp://127.0.0.1/item 新增,POST

接受数据

  • 在Spring MVC中可以使用 @PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上。
@Controllerpublic class RestFulController {
@RequestMapping(value = "/r1/{n1}/{n2}") public String test1(@PathVariable int n1, @PathVariable int n2, Model model) {
int result = n1 + n2; model.addAttribute("msg", "结果为:" + result); return "test"; }}

在这里插入图片描述

  • 小结
  1. 使路径变得更加简洁;
  2. 获得参数更加方便,框架会自动进行类型转换。
  3. 通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问是的路径是/r1/1/a,则路径与方法不匹配,而不会是参数转换失败。
    在这里插入图片描述
  • 我们来修改下对应的参数类型,再次测试
@RequestMapping(value = "/r1/{n1}/{n2}")    public String test1(@PathVariable int n1, @PathVariable String n2, Model model) {
String result = n1 + n2; model.addAttribute("msg", "结果为:" + result); return "test"; }

在这里插入图片描述

使用method属性指定请求类型

  • 用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等
  • 我们现在设置只能使用POST请求才能访问
@RequestMapping(value = "/r1/{n1}/{n2}", method = {
RequestMethod.POST}) public String test1(@PathVariable int n1, @PathVariable String n2, Model model) {
String result = n1 + n2; model.addAttribute("msg", "结果为:" + result); return "test"; }
  • 那么我们用浏览器默认的get请求就会找不多路径
    在这里插入图片描述
  • 小结:

Spring MVC 的 @RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。

所有的地址栏请求默认都会是 HTTP GET 类型的。

方法级别的注解变体有如下几个:组合注解, 平时使用的会比较多!

@GetMapping

@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。

  • 这个风格三大好处就是简便高效支持缓存还安全

SpringMVC接收数据

提交的域名称和处理方法的参数名一致

  • url中的域名会和方法中的参数名进行一个匹配
  • 比如我的url为http://localhost:8080/04_1_war_exploded/r2?name=listen
  • 处理代码
@RequestMapping(value = "/r2")    public String test2(String name, Model model) {
model.addAttribute("msg", "结果为:" + name); return "test"; }

在这里插入图片描述

提交的域名称和处理方法的参数名一致

  • 使用@RequestParam(“username”) : username提交的域的名称 .进行一个关系的建立
@RequestMapping(value = "/r2")    public String test2(@RequestParam(value = "username") String name, Model model) {
model.addAttribute("msg", "结果为:" + name); return "test"; }

在这里插入图片描述

提交的是一个对象

  • 后端接收是对象的时候,直接按照对象接收就行
  1. 接收前端用户提交的参数, 判断参数名字,假设名字直接在方法上,可以直接使用
  2. 假设传递的是对象user,会匹配user的字段名,如果名字上有一致则ok,否则不匹配,所以传递对象的时候,前端传递的参数名和对象的属性名必须一致, 否则这个对象的属性名就为null
public class User {
private String name; private int age; private String hobby;}
@RequestMapping(value = "/r3")    public String test3(User user, Model model) {
model.addAttribute("msg", "结果为:" + user.toString()); return "test"; }

在这里插入图片描述

  • 结果可以看出, POJO对象的hobby与hhhbupip, 所以获得的user对象的对应属性就是null

数据显示到前端

第一种 : 通过ModelAndView

  • 这是一种最原始的一种实现mvc流程的用法, 通过设置viewName和视图解析器来找对对应的前端显示对应数据
@RequestMapping(value = "/r5")    public ModelAndView test45(ModelAndView modelAndView) {
modelAndView.addObject("msg", "我是 ModelAndView"); modelAndView.setViewName("test"); return modelAndView; }

在这里插入图片描述

第二种 : 通过ModelMap

  • 这个和model类似, 但是功能更加强大, 其继承了LinkdeMap所以具有LinkedMap的所有功能
    在这里插入图片描述
@RequestMapping(value = "/r4")    public String test4(ModelMap modelMap) {
modelMap.addAttribute("msg", "我是 modelMap"); return "test"; }

在这里插入图片描述

第三种 : 通过Model

  • 这是最普通的,也是我们最常用的, 也是最简便的
@RequestMapping(value = "/r3")    public String test3(User user, Model model) {
model.addAttribute("msg", "结果为:" + user.toString()); return "test"; }

对比三个

Model 只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解;

ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性;

ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。

转载地址:http://wnsci.baihongyu.com/

你可能感兴趣的文章
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>
Brackets安装及常用插件安装
查看>>
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>
学习设计模式(3)——单例模式和类的成员函数中的静态变量的作用域
查看>>