RESTful案例
1.1 什么是RESTful
RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
1、 对url进行规范,写RESTful格式的url
非REST的接口:http://.../queryItems?id=001&type=T01
REST的url接口:http://.../items/001/T01/123/
2、 对http方法的规范(暂不使用)
不管是删除、添加、更新,使用URL是一致的,如果进行删除,需要设置http的method为delete,controller类的方法需要判断http的方法来决定做什么操作
3、 对contentType的规范
响应时指定contentType,要json数据,则设置成json格式的type
1.2 RESTful的例子
1.2.1 需求
查询商品信息,返回json数据
1.2.2 Controller类
@RequestMapping(value="/ itemsView/{id}"):{×××}占位符,请求的URL可以是“/viewItems/1”或“/viewItems/2”,通过在方法中使用@PathVariable获取{×××}中的×××变量。
@PathVariable:用于将请求URL中的模板变量映射到功能处理方法的参数上。
注意:如果RequestMapping中表示为"/ itemsView /{id}",id和形参名称一致,@PathVariable不用指定名称。
//查询商品信息,返回json数据(使用rest)
//${id}:表示占位符
//@PathVariable:获取URL中占位符里面的参数
//如果占位符中的参数和形参一致,则可以不用再@PathVariable里面指定名称
//@ResponseBody:把返回值转成json输出到前台
@RequestMapping("/queryItems4Rest/{id}")
public @ResponseBody Items queryItems4Rest(@PathVariable Integer id){
Items items = itemsService.findItemsById(id);
return items;
}
使用以下URL进行访问:
http://localhost:8080/ssm0122/items/queryItems4Rest/1
注意:web.xml中DispatcherServlet的拦截url-pattern配置为/才能支持RESTful,但是这种配置的话,静态资源则无法访问
1.2.3 Controller类
@RequestMapping("/pets/{petId}")
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
// implementation omitted
}
}
上面代码把URI template 中变量 ownerId的值和petId的值,绑定到方法的参数上。若方法参数名称和需要绑定的uri template中变量名称不一致,需要在@PathVariable("name")指
定uri template中的名称。
1.3 访问静态资源配置
在访问工程内部的js、css、静态图片时,如果在web.xml中DispatcherServlet是用/来拦截请求的话,会把静态资源的访问也给拦截,使用*.do方式的话则不会拦截静态资源。
如果想正常访问静态资源,需要以下三种方式的任一配置:
1.3.1 使用mvc:resources标签(推荐)
在springmvc.xml文件中,使用mvc:resources标签,具体如下:
<!-- 当DispatcherServlet配置为/来拦截请求的时候,需要配置静态资源的访问映射 -->
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
Springmvc会把mapping映射到ResourceHttpRequestHandler,这样静态资源在经过DispatcherServlet转发时就可以找到对应的Handler了。
1.3.2 使用mvc:default-servlet-handler标签
在springmvc.xml文件中,使用mvc:default-servlet-handler标签,具体如下:
<!-- 使用mvc:default-servlet-handler,可以处理静态资源的访问 -->
<mvc:default-servlet-handler/>
1.3.3 激活Tomcat的defaultServlet来处理静态文件
在web.xml中添加以下内容:
<!-- 激活tomcat的静态资源拦截 ,需要哪些静态文件,再往下追加-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
注意:servlet-name的值参考如下:
Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet的名字 -- "default"
Google App Engine 默认 Servlet的名字 -- "_ah_default"
Resin 默认 Servlet的名字 -- "resin-file"
WebLogic 默认 Servlet的名字 -- "FileServlet"
WebSphere 默认 Servlet的名字 -- "SimpleFileServlet"
浙公网安备 33010602011771号