Spring 全家桶之 Spring Web MVC(二)- Restful(上)

简介: Spring 全家桶之 Spring Web MVC(二)- Restful
+关注继续查看

一、REST风格URL

创建一个新的Maven工程,导入依赖,添加Framework Support,选择Web,配置web.xml,创建Spring MVC的配置文件,点击Project Structure,在Artifacts目录下选择WEB-INF,点击创建lib文件夹,并将右侧的jar导入新建的lib文件夹下,配置Tomcat,配置项目请求地址为/,启动Tomcat

@Controller
public class TeslaController {
    @RequestMapping(value = "/tesla/{name}", method = RequestMethod.GET)
    public String get(@PathVariable("name") String name){
        System.out.println("查询Tesla车型:" + name);
        return "success";
    }
    @RequestMapping(value = "/tesla", method = RequestMethod.POST)
    public String add(){
        System.out.println("增加Tesla车型");
        return "success";
    }
    @RequestMapping(value = "/tesla/{name}", method = RequestMethod.PUT)
    public String update(@PathVariable("name") String name){
        System.out.println("更新Tesla车型:" + name);
        return "success";
    }
    @RequestMapping(value = "/tesla/{name}", method = RequestMethod.DELETE)
    public String delete(@PathVariable("name") String name){
        System.out.println("删除Tesla车型:" + name);
        return "success";
    }
}
复制代码

index.jsp页面

<h3>查询Tesla</h3>
<a href="/tesla/cybertruck">Cybertruck</a>
<h3>增加Tesla车型</h3>
<form action="/tesla" method="post">
  <button type="submit">增加Semi Truck</button>
</form>
<h3>更新Tesla车型</h3>
<a href="/tesla/model3">更新Model 3</a>
<h3>删除Tesla车型</h3>
<a href="/tesla/roadster">删除Roadster</a>
复制代码

逐个点击,查看控制台输出,其中更新和删除最终调用的是get()方法

1f5e767c813c41439f0ee4aadf4ea4ef_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

想要从页面发起PUT和DELETE请求需要用到Spring MVC中的HiddenHttpMethodFilter,可以将普通请求转换为PUT和DELETE请求 在web.xml中配置Filter

<!--Rest支持-->
<filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
复制代码

改造页面的请求,使用表单发起PUT和DELETE请求

<h3>更新Tesla车型</h3>
<form action="/tesla/model3" method="post">
  <input type="hidden" name="_method" value="put">
  <button type="submit">更新Model 3</button>
</form>
<h3>删除Tesla车型</h3>
<form action="/tesla/roadster" method="post">
  <input type="hidden" name="_method" value="delete">
  <button type="submit">删除Roadster</button>
</form>
复制代码

点击更新和删除按钮,控制台输出相应的内容

a297bef6a7a34d849dc85531c61236d9_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

解决页面报错的问题,增加isErrorPage="true"

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
复制代码

二、获取请求参数

默认方式获取请求中参数的值

  • 在方法入参中增加一个和请求中参数名相同的参数,就可以接收请求中参数的值
  • 如果请求中没有输入参数,则控制器方法中参数的值为null

新建一个ParamController

@Controller
public class ParamController {
    @RequestMapping("/param")
    public String getParam(String username){
        System.out.println("请求中的传输的数据为:" + username);
        return "success";
    }
}
复制代码

浏览器中输入http://localhost:8080/param?username=stark

5cf8d74e05164914a5268e6b87d28152_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

@RequestParam注解获取请求中的参数的值

ParamsController中增加方法

@RequestMapping("/param")
public String getParam(@RequestParam("user") String username){
    System.out.println("请求中的传输的数据为:" + username);
    return "success";
}
复制代码

浏览器中输入http://localhost:8080/param?user=stark

3d35de5312834451a43c176872fb1c50_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

@RequestParam("user")这句代码就相当于

request.getParameter("user")
复制代码

@RequestParam的属性

  • value:指定要获取参数的参数名
  • required:参数是否是必传的,默认为true,必传
  • defaultValue:指定参数默认值,默认为null

测试required属性

启动tomcat,浏览器输入http://localhost:8080/param, 不带user参数会报错

4f3dc2c7da1345f2872c607bb7aebcc8_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

修改getParam方法,在@RequestParam中增加属性required=false,重启Tomcat,再次访问http://localhost:8080/param

2823aac9abce4885bbe63b7d21582d19_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

不传user参数,页面不再报错,并且user默认的值为null

1906853879784b75982a18ffefd9306b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

测试defaultValue属性

给getParam方法增加,defaultValue属性,defaultValue=“默认值”,浏览器输入http://localhost:8080/param, 控制台打印出设置的默认值

17d4e6888b8c4e2f88e3966860c4626f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

@RequestHeader注解获取请求头

获取请求中的Key的值,在ParamController中新增方法getHeaders

@RequestMapping("/headers")
public String getHeaders(@RequestHeader(value = "User-Agent",required = false, defaultValue = "默认值") String userAgent){
    System.out.println("请求头中的Key User-Agent的值为:" + userAgent);
    return "success";
}
复制代码

浏览器中输入http://localhost:8080/headers,控制台中打印出User-Agent的值,与@RequestParam有三个同样的属性,且用法一致

245273573d0d4d68922267e28f276d7e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


相关文章
|
23天前
|
设计模式 Java API
使用Spring框架创建一个RESTful API,实现学生信息的管理,包括资源的创建、读取、更新和删除。
在当今的Web应用程序开发中,RESTful API(Representational State Transferful Application Programming Interface)变得越来越重要。Spring框架提供了强大的工具和功能,以便轻松创建、读取、更新和删除(CRUD)资源。在这篇文章中,我们将深入探讨如何使用Spring框架创建一个RESTful API,并通过一个完整的示例演示。
|
23天前
|
前端开发 Java API
什么是RESTful API,Spring MVC如何支持RESTful架构
RESTful API(Representational State Transfer)是一种基于HTTP协议的软件架构风格,用于设计网络应用程序的API。它强调使用标准的HTTP方法(GET、POST、PUT、DELETE等)来进行资源的操作,以及使用URI来标识资源。RESTful API的设计目标是简单、可扩展、易于理解和使用。
|
2月前
|
前端开发 Java API
# Spring MVC与RESTful API:如何设计高效的Web接口
# Spring MVC与RESTful API:如何设计高效的Web接口
35 0
|
4月前
|
JSON Java 数据库
Spring Data JPA构建Restful服务应用Demo
昨天介绍了什么是Rest和Restful,没有看到的同学可以参考我的这篇文章:深入理解REST与RESTfulAPI 那么说了这么多咱就实战一把,如何用SpringBoot来实现Rest,只需要Spring DataJPA和Spring Data Rest两个依赖包,快速开发一个restful应用。
126 1
|
4月前
|
Java 测试技术 API
Spring Boot之Restful服务与Swagger框架:构建易用的API文档与测试工具
本篇详细介绍了如何在Spring Boot应用中构建Restful服务,并结合Swagger框架实现自动生成API文档和提供API测试工具的方法。通过编写Controller类定义Restful API,以及配置Swagger框架,读者可以轻松地生成API文档和进行API测试,从而提升开发效率和项目可维护性。该博文帮助读者了解了如何使用Spring Boot和Swagger框架来简化API文档编写和测试的过程,为Web应用开发提供了有力的支持。
162 2
Spring Boot之Restful服务与Swagger框架:构建易用的API文档与测试工具
|
5月前
|
JavaScript 安全 小程序
Spring Cloud实战 | 第十一篇:Spring Cloud Gateway网关实现对RESTful接口权限和按钮权限细粒度控制
Spring Cloud实战 | 第十一篇:Spring Cloud Gateway网关实现对RESTful接口权限和按钮权限细粒度控制
Spring Cloud实战 | 第十一篇:Spring Cloud Gateway网关实现对RESTful接口权限和按钮权限细粒度控制
|
5月前
|
存储 IDE Java
深入探讨Spring Boot:实现一个完整的RESTful应用程序
在这篇博客中,我们将深入探讨如何使用Spring Boot构建一个完整的RESTful应用程序,数据库选择MySQL。我们将通过实现一个简单的用户管理系统来演示Spring Boot的强大功能。 1. 创建项目 首先,访问Spring Initializr,选择以下依赖项: Web:用于创建Web应用程序 JPA:用于访问数据库 MySQL:用于连接MySQL数据库
80 0
|
6月前
|
XML JSON 前端开发
《Spring MVC》 第五章 实现RESTful
《Spring MVC》 第五章 实现RESTful
40 0
|
7月前
|
Java API Maven
使用Spring Boot构建RESTful API
使用Spring Boot构建RESTful API
91 0
|
7月前
|
监控 前端开发 安全
Spring Boot 统一RESTful接口响应和统一异常处理
基于Spring Boot 框架开发的应用程序,大部分都是以提供RESTful接口为主要的目的。前端或者移动端开发人员通过调用后端提供的RESTful接口完成数据的交换。 统一的RESTful接口响应数据结构是基本的开发规范。能够减少团队内部不必要的沟通;减轻接口消费者校验数据的负担;降低其他同事接手代码的难度;提高接口的健壮性和可扩展性。 统一的异常处理,是系统完备性的基本象征。通过对全局异常信息的捕获,能够避免将异常信息和系统敏感信息直接抛给客户端;针对特定类型异常捕获之后可以重新对输出数据做编排,提高交互友好度,同时可以记录异常信息以便监控和分析。
224 0
Spring Boot 统一RESTful接口响应和统一异常处理
相关产品
云迁移中心
推荐文章
更多