一、什么是REST?

符合REST约束风格和原则的应用程序或者设计就是REST

例如:

/blog/1   HTTP GET    =>查询id=1的blog

/blog/1   HTTP DELETE =>删除id=1的blog

/blog/1   HTTP PUT    =>更新blog

/blog/add HTTP POST  =>新增blog

二、SpringMVC对REST应用提供了以下支持

1、利用@RequestMapping指定要处理请求的URI模板和HTTP请求的动作类型。

1.1、@RequestMapping应用

@RequestMapping可以定义在Controller类前和处理方法前,主要用于指定Controller的方法处理那些请求

1.2、在REST应用中,@RequestMapping可以采用以下使用格式:

(1)@RequestMapping(value="/emp/{id}",method=RequestMethod.GET)

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

(3)@RequestMapping(value="/emp/{id}",method=RequestMethod.PUT)

(4)@RequestMapping(value="/emp/add",method=RequestMethod.POST)

2、利用@PathVariable将URI模板中的变量映射到处理方法的参数上

2.1、@PathVariable应用

@PathVariable作用是将URI请求模板中的变量解析出来,映射到处理方法的参数上

2.2、@PathVariable使用示例

@RequestMapping(value="/appName/{name}",method=RequestMethod.GET)

public String execute(@PathVariable("name")int name)

return name;

}

2.3、URL请求匹配

比如上述的例子可以这样访问:http://www.eguid.cn/appName/参数

参数对应的就是name的值。

3、利用Ajax,在客户端发出PUT、POST、GET和DELETE请求

客户端发送PUT、POST、GET和DELETE请求

采用Ajax方式发送PUT、POST、GET和DELETE

$.ajax({

type:"PUT",//这里的参数可以是PUT、POST、GET和DELETE

url:"/appName/name",//请求地址,name就是你的参数

data:JSON.stringify($("#myform").serializaObject()),

dataType:"json",

contentYype:"application/json",//这个一定要设置

success:function(data){

//这里是成功获取信息后的处理方法

}

});



重要的补充:

data:JSON.stringify($("#myform").serializaObject())

$("#myform").serializaObject()是通过jquery直接将form表单生成json对象;

JSON.stringify()是把json对象转成json字符串的操作;

再次补充:spring4.x支持json对象解析,如果使用spring4.x,这里直接写$("#myform").serializaObject()就可以了,不需要再转成字符串。

后端spring可以直接通过实体类就可以自动解析json

4、静态资源访问处理

采用RESTful架构后,必须将web.xml中控制器拦截的请求设置为 ‘ / ’ ;但是这样会产生一个问题,就是会将css,js,图片等静态资源拦截,发生404错误。

解决方案如下:

1、配置<mvc:resources/>

springMVC配置文件中这样使用:

<mvc:resources mapping="请求URI" location="资源位置";

2、在springMVC配置文件中使用<mvc:default-servlet-handler/>

配置该指令放行默认的静态资源:

<mvc:default-servlet-handler/>

大部分情况下第二种就可以解决问题,而且方便简单

springMVC实现REST开发详解(补充Json解析问题以及静态文件404错误解决办法)的更多相关文章

  1. Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

    最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所 ...

  2. springMVC数据验证出现404错误解决办法

    今天使用springMVC的数据验证的时候,看似很简单的东西,却有一个很大的陷阱:提交空表单的时候总是出现404错误,但是后台却不给你报任何错.遇到这个错误这个很苦恼,搞了几小时,今天记录并分享一下解 ...

  3. 详解get请求和post请求参数中文乱码的解决办法

    首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的. 一,get请求参数中文乱码的解 ...

  4. javaCV开发详解之12:视频转apng动态图片实现,支持透明通道,也支持摄像机、桌面屏幕、流媒体等视频源转apng动态图

    wjavaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG. ...

  5. ****基于H5的微信支付开发详解[转]

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  6. PayPal 开发详解(七):运行REST API SAMPLE

    1.编译成功,修改配置文件 sdk_config.properties ,使用我们申请的测试帐号执行收款测试,clientId 和 clientSecret 参见 PayPal 开发详解(五) 2.将 ...

  7. iOS应用开发详解

    <iOS应用开发详解> 基本信息 作者: 郭宏志    出版社:电子工业出版社 ISBN:9787121207075 上架时间:2013-6-28 出版日期:2013 年7月 开本:16开 ...

  8. javaCV开发详解之技术杂烩:javaCV能帮我们做什么?能实现什么功能?ffmpeg和openCV能实现功能,javaCV如何做到更快、更简单的实现相应的功能?等等一堆实用话题

    前言: 该篇文章旨在帮助刚接触javaCV的盆友系统的认识音视频.javaCV.图像处理相关的体系知识和一些实用的知识. 序: javaCV早期因为内置了openCV库,所以常用来做图像识别应用,现在 ...

  9. javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

随机推荐

  1. R中基本统计图

    一.条形图 1.安装包install.packages("vcd"); library(vcd);count<-table(Arthritis$Improved);#tabl ...

  2. Linux防火墙配置—允许转发

    一.实验目标 在上一次"Linux基础网络搭建实验"中,内.外网虚拟机之所以能Ping通,是因为暂时关闭了防火墙,然而现实中这样操作显然存在很大的安全隐患,所以本次实验在上次实验的 ...

  3. Python 操作 MySQL 的正确姿势

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:邵建永 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MyS ...

  4. bzoj2560 串珠子

    Description 铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个珠子和第j个珠子,可以选择不 ...

  5. TypeScript入门-枚举、类型推论

    枚举 使用枚举可以定义一些具有名字的数字常量,和在C语言中一样都是使用关键字enum enum Direction { Up = 1, Down = 1<<2, Left, Right } ...

  6. 跨域资源共享CORS详解

    简介 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请 ...

  7. 转载 ~shell简介

    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...

  8. Yeelink初步体验

    环境 Qemu: 2.8.0 开发板:vexpress-ca9   概述     前面的博文已经使我们的虚拟开发板具备了访问外网的目的,离物联网越来越近了.要玩物联网,Yeelink不得不说,它提供了 ...

  9. hdu3709 Balanced Number 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题目大意就是求给定区间内的平衡数的个数 要明白一点:对于一个给定的数,假设其位数为n,那么可以有 ...

  10. JAVA THREAD.JOIN方法详解

    一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二.为什么要用join() ...