如何利用Spring MVC实现RESTful风格

 更新时间:2022年02月22日 11:40:06   作者:快乐的小三菊  
这篇文章主要介绍了如何利用Spring MVC实现RESTful风格,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringMVC实现RESTful风格

RESTful

中文释义为”表现层状态转换“,它不是一种标准,而是一种设计风格。

它的主要作用是充分并正确利用HTTP协议的特性,规范资源获取的URI路径。

通俗的讲,RESTful风格的设计允许将参数通过URL拼接传到服务端,目的是让URL看起来更简洁实用。

并且对于不同的操作,要指定不同的HTTP方法(POST/GET/PUT/DELETE)。可以这么说,只要是具有上述相关条件和原则的应用程序或设计就可以被称为RESTful风格的应用。

一个满足RESTful的程序或设计应满足以下条件和约束:

第一:对请求的URL进行规范,在URL中不会出现动词,而是使用HTTP协议的动词

第二:充分利用HTTP方法,HTTP方法名包括:GET、POST、PUT、PATCH、DELETE

使用Spring MVC实现RESTful风格

Spring mvc可以使用@RequestMapping的路径设置,结合@PathVariable的参数指定,来实现RESTful风格的请求。

样例要实现,通过拼接水果商品的id来实现一个RESTful风格的请求,并向后台发送该请求,以此来获取JSON格式的水果数据

@RequestMapping(value="/queryFruit/{id}",method={RequestMethod.GET})
public @ResponseBody Fruits getFruitById(Model model,@PathVariable("id") Integer fruitId) throws Exception{
    Fruits fruit = fruitsServices.queryFruitById(fruitId);
    return fruit; 
}

在该方法中,在@RequestMapping注解的请求路径中添加了一个动态数据"{id}",它的作用是解析前台的请求路径,将动态数据所在的位置解析为名为id的请求参数。

@PathVariable注解,在其中指定请求参数的key名称,并映射在后面定义的形参上,这里定义fruitId形参来接收名为id的请求参数,最后使用@ResponseBody注解加上之前配置的类型转换器,返回客户端JSON类型的水果详细信息,总的来说,利用SprngMVC实现RESTful风格主要就是在于请求路径和请求参数的映射,以及RequestMapping的指定,更改web.xml中配置文件的内容,将*.do改成"/",这样编写的RESTful风格的请求才能被前端控制器拦截到并解析。

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

然后重启工程,输入网址:http://localhost:8080/工程名/queryFruit/1

上面的代码为查询类型的请求代码,而新增、修改以及删除的请求与此类似,区别就是需要指定不同的RequestMethod(POST/PUT/DELETE),样例代码如下:

        //添加水果逻辑
	@RequestMapping(value="/addFruit",method= {RequestMethod.POST})
	public String addFruit(Model model,Fruits fruit)throws Exception{
		//implements
		return "...";
	}
	//通过id删除水果商品
		@RequestMapping(value="/deleteFruit/{id}",method= {RequestMethod.DELETE})
		public String deleteFruitById(Model model,@PathVariable Integer fruitId)throws Exception{
			//implements
			return "...";
		}
	//修改水果商品信息
	@RequestMapping(value="/editFruit",method= {RequestMethod.PUT})
	public String editFruitById(Model model,Fruits fruit)throws Exception{
		//implements
		return "...";
	}

前端在访问RESTful风格的增、删、该请求时,需要配置HTTP请求的方法(method参数)。如果是在JSP页面上使用form表单的提交方式来请求RESTful风格的服务,需要根据请求的类型,在form表单标签中指定HTTP请求的相关method参数。

静态资源访问问题

前面在web.xml中配置了符合RESTful风格的DispatcherServlet前端控制器过滤器。但是这种过滤方式会造成静态资源无法访问的问题,例如:在webContent下的image文件夹下放置一张图片logo.jpg。

由于图片放置在WEB-INF文件外(由于JavaWEB的保护机制,WEB-INF文件夹下的文件不可直接访问),所以原则上是可以通过直接访问静态资源的方式获取该图片的,但是输入http://localhost:8080/工程名/image/logo.jpg的请求后,不能获取到图片资源。

原因:

在web.xml中配置了前端控制器的请求过滤机制,为了接收RESTful风格的请求,将过滤的后缀去除了,变成过滤所有后缀的请求路径,此时静态资源会被当做一个业务请求被前端控制器处理,前端控制器没有发现能够处理该请求的Controller控制器方法,所以对外抛出了404错误。

解决方式一:

在类加载配置文件springmvc中使用"mvc:resources"配置静态资源的解析路径,将需要加载的静态资源的URI路径配置在标签中,然后配置该URI映射的真是资源路径。

<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/img/" mapping="/img/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>

当在springmvc.xml中配置了静态资源文件的解析路径后,前端控制器就会根据请求URL中的具体子路径来映射出静态资源的真是路径,然后为前端反馈真实的静态资源信息。

解决方式二:

在springmvc.xml中使用"<mvc:default-servlet-handler/>"配置默认的Servlet处理器,该配置将在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,他会对进入DispatcherServlet的请求进行筛选,若发现没有经过映射的请求,就将该请求交由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet前端控制器继续处理,此时就可以将请求中的静态资源和其他业务请求分开处理,从而正常地返回静态资源信息。

Spring MVC的RESTful学习

什么RESTful

RESTful也称为REST(Representational State Transfer),可以将它理解为一种软件架构风格或设计风格

RESTful风格就是把请求参数编程请求路径的一种风格。

例如,传统的URL请求如下:

http://.../requestparam?id=1

而采用RESTful风格后,URL请求变为:

http://.../param/1

RESTful风格在HTTP请求中使用put,delete,post和get方式分别对应添加,删除,修改和查询的操作。不过国内开发目前只使用post和get方式实现增删改查操作。

使用简单的加法计算

@Controller
public class RestFulController {
    //原来的:localhost:8080/add?a=1&b=1
    //RestFul:   localhost:8080/add/a/b
    @RequestMapping(value = "/add/{a}/{b}",method = RequestMethod.GET)
    public String test(@PathVariable int a,@PathVariable int b, Model model) {
        int res = a + b;
        model.addAttribute("msg","结果为:"+res);
        return "test";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java生成excel报表文件示例

    java生成excel报表文件示例

    本篇文章主要介绍了java生成excel报表文件示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • spring boot Slf4j日志框架的体系结构详解

    spring boot Slf4j日志框架的体系结构详解

    在项目开发中记录日志是必做的一件事情,springboot内置了slf4j日志框架,下面这篇文章主要给大家介绍了关于spring boot Slf4j日志框架的体系结构,需要的朋友可以参考下
    2022-05-05
  • hibernate 常用方法介绍

    hibernate 常用方法介绍

    这篇文章介绍了hibernate的常用方法,有需要的朋友可以参考一下
    2013-09-09
  • Java实现身份证号码验证源码示例分享

    Java实现身份证号码验证源码示例分享

    本篇文章主要介绍了Java实现身份证号码验证源码示例分享,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • JDK8通过Stream 对List,Map操作和互转的实现

    JDK8通过Stream 对List,Map操作和互转的实现

    这篇文章主要介绍了JDK8通过Stream 对List,Map操作和互转的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 在Spring Boot中使用swagger-bootstrap-ui的方法

    在Spring Boot中使用swagger-bootstrap-ui的方法

    这篇文章主要介绍了在Spring Boot中使用swagger-bootstrap-ui的方法,需要的朋友可以参考下
    2018-01-01
  • Java中ArrayList实现原理及基本方法

    Java中ArrayList实现原理及基本方法

    这篇文章主要介绍了Java中ArrayList实现原理及基本方法,ArrayList是开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,擅长随机访问元素,插入和删除较慢,需要的朋友可以参考下
    2023-08-08
  • SpringBoot之拦截器与过滤器解读

    SpringBoot之拦截器与过滤器解读

    这篇文章主要介绍了SpringBoot之拦截器与过滤器解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 简述Java中throw-throws异常抛出

    简述Java中throw-throws异常抛出

    任何Java代码都可以抛出异常,本文主要介绍了Java中throw-throws异常抛出,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • Java实现二维码、条形码功能(案例代码)

    Java实现二维码、条形码功能(案例代码)

    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口,Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码,这篇文章主要介绍了Java实现二维码、条形码等功能,需要的朋友可以参考下
    2024-01-01

最新评论