0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Spring Boot Web相关的基础知识

jf_78858299 来源:QStack 作者:月下西楼 2023-03-17 15:03 次阅读

上一篇文章我们已经学会了如何通过IDEA快速建立一个Spring Boot项目,还介绍了Spring Boot项目的结构,介绍了项目配置文件pom.xml的组成部分,并且撰写了我们Spring Boot的第一个接口。接下来将会将会介绍使用Spring Boot开发Web应用的相关内容,其主要包括使用spring-boot-starter-web组件来实现Web应用开发、URL地址映射、参数传递、数据校验规、统一数据返回和统一异常处理等等。

Web基础

Spring Boot将传统Web开发的mvc、json、validation、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置和开发的难度,将开发者从繁杂的配置项中拯救出来,专注于业务逻辑的开发。

正如上一篇文章所提到的,我们只需要在pom.xml文件中的dependencies中添加以下代码就可以引入spring-boot-starter-web。其中的webmvc是Web开发的基础框架,json是JSON数据解析组建,tomcat为自带的容器依赖。

<dependency>
    <groupId>org.springframework.boot<span class="hljs-name"groupId>
    <artifactId>spring-boot-starter-web<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>

@Controller和@RestController

Spring Boot提供了@Controller和@RestController两种注解来标识此类负责接收和处理HTTP请求,如果请求的是页面和数据,使用@Controller注解即可,如何只请求数据,则可以使用哦@RestController注解。

@Controller

@Controller主要主要用于页面和数据的返回,如果在@Controller类中只返回数据到前台页面,则需要使用@ResponseBody注解,否则会报错,其代码如下:

@Controller
public class HelloController {
    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello @Spring Boot!!!";
    }
}

@RestController

@RestController注解用于实现数据请求的处理,默认情况下@RestController注解会将返回的对象数据转换为JSON格式,其代码如下:

@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/getUser")
    @ResponseBody
    public User getUser() {
        User u = new User();
        u.setName("QStack");
        u.setAge(20);
        u.setPassword("123456");
        return u;
    }
}

在上述的例子中,定义/user/getUser接口返回JSON格式的User数据,近几年前端框架越来越强大,前后端分离的RESTful架构成为主流,Spring Boot对RESTful也做了非常完善的支持,使用也特别简单,使用@RestController注解自动返回JSON格式的数据,与此同时可以使用@GetMapping和@PostMapping等注解实现映射RESTful接口。

@ResponseBody

@ResponseBody注解主要用于定义数据的返回格式,作用在方法上,默认使用Json序列化成JSON字符串后返回给客户端,如果是字符串则直接返回。在@Controller中有时需要返回数据体,则需要在方法上使用@Responsebody。

@RequestMapping与URL映射

注解@RequestMapping注解主要负责URL的路由映射,它可以添加在Controller类或具体的方法上,如果添加在Controller类上,则这个Controller中所有的路由映射都会加上此映射规则,如果添加在方法上则只对当前方法生效。@RequestMapping注解包含很多属性参数来定义HTTP,具体属性参数如下所示,与此相应的Spring Boot支持URL路径匹配、HTTP Method匹配、params和header匹配等URL映射。

  • value:请求URL的路径,支持URL模版、正则表达式
  • method:HTTP请求的方法
  • consumes:允许的媒体类型,如consumes=“application/json”为HTTP的Content-Type
  • produces:相应的媒体类型,如produces=“application/json”为HTTP的Accept字段
  • params:请求参数
  • headers:请求头参数

URL路径匹配

精确匹配

@RequestMapping的value属性用于匹配URL映射,value支持简单表达式。示例代码如下,其中@PathVariable注解作用在方法参数中,用于表示参数的值来自于URL路径。

@RequestMapping("/getUserById/{id}")
public String getUserById(@PathVariable("id") Long id) {
    return "getUserById" + id;
}

如果URL中的参数名称与方法中的参数名一致,则可以简化为如下

@RequestMapping("/getUserById/{id}")
public String getUserById(@PathVariable Long id) {
    return "getUserById" + id;
}

通配符匹配

@RequsetMapping支持使用通配符匹配URL,用于统一映射某些URL规则类似的请求,示例的代码如下

@RequestMapping("/getJson/*.json")
public String getJson() {
    return "get json data";
}

在上例中,无论请求/getJson/a.json还是请求/getJson/b.json都会匹配到getJson方法。

Method匹配

@RequestMapping注解提供了method参数指定请求的Mathod类型,包括RequestMethod.GET 、RequestMethod.POST、RequestMethod.DELETE、RequestMethod.PUT等值,分别对应HTTP请求的Method,以下是以GET方法为例说明。

@RequestMapping(value = "/getData", method = RequestMethod.GET)
public String getData() {
    return "RequestMethod GET";
}

consumes和produces匹配

@RequestMapping注解提供了consumes和produces参数用于验证HTTP请求的内容类型和返回类型。

  • consumes表示请求的HTTP头的Content-Type媒体类型与consumes的值匹配才可以调用方法。
  • produces表示HTTP请求中Accept字段匹配成功才可以调用。下面的例子演示了consumes参数的用法。
@RequestMapping(value = "/content", method = RequestMethod.POST, consumes = "application/json")
public String Consumes(@RequestBody Map param){
    return "Consumes POST Content-Type=application/json";
}

params和header匹配

@RequestMapping注解还提供header参数和params参数映射URL请求的能力,Spring Boot可以从请求参数或HTTP头中提取参数,通过判断参数如params=“action=save”是否通过来实现映射,代码如下

@RequestMapping(value = "/testParam", params = "action=save")
public String testParam(@RequestBody Map param) {
    return "param test";
}
@RequestMapping(value = "/testHead", headers = {"Host=localhost:8080"})
public String testHead() {
    return "header test";
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1238

    浏览量

    68500
  • URL
    URL
    +关注

    关注

    0

    文章

    134

    浏览量

    14849
  • spring
    +关注

    关注

    0

    文章

    333

    浏览量

    14166
  • idea
    +关注

    关注

    1

    文章

    66

    浏览量

    4054
收藏 人收藏

    评论

    相关推荐

    启动Spring Boot项目应用的三种方法

    的读取,开启注解4)配置日志文件...配置完成之后部署tomcat 调试。但是如果使用spring boot呢?很简单,我仅仅只需要非常少的几个配置就可以迅速方便的搭建起来一套web项目或者是构建一个
    发表于 01-14 17:33

    谈一谈Spring Boot嵌入式Web容器

    Spring Boot嵌入式Web容器Embedded Tomcatorg.springframework.boot.context.embedded.EmbeddedServletConta
    发表于 12-16 08:16

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目标是构建“非常容易创建、独立、产品级别的基于
    发表于 12-16 07:57

    Spring Boot定时任务的重写方法

    Spring Boot应该是目前最火的java开源框架了,它简化了我们创建一个web服务的过程,让我们可以在很短时间、基本零配置就可以启动一个web服务。
    的头像 发表于 01-20 17:38 2222次阅读

    Spring Boot从零入门1 详述

    在开始学习Spring Boot之前,我之前从未接触过Spring相关的项目,Java基础还是几年前自学的,现在估计也忘得差不多了吧,写Spring
    的头像 发表于 12-10 22:18 419次阅读

    Spring认证」什么是Spring GraphQL?

    这个项目建立在 Boot 2.x 上,但它应该与最新的 Boot2.4.x5 相关。 要创建项目,请转到start.spring.io并为要使用的GraphQL传输选择启动器: 启动机
    的头像 发表于 08-10 14:08 614次阅读
    「<b class='flag-5'>Spring</b>认证」什么是<b class='flag-5'>Spring</b> GraphQL?

    学习Spring Boot 嵌入式服务器

    嵌入式Web服务器每个Spring Boot Web应用程序都包含一个嵌入式Web服务器。此功能会导致许多操作方法问题,包括如何更改嵌入式服
    发表于 10-20 15:36 7次下载
    学习<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 嵌入式服务器

    Spring Boot特有的实践

    Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验
    的头像 发表于 09-29 10:24 648次阅读

    简述Spring Boot数据校验

    上一篇文章我们了解了Spring Boot Web相关知识,初步了解了spring-boot-star
    的头像 发表于 03-17 15:07 551次阅读

    Spring Boot配置加载相关知识

    Spring BOOT 启动参数 在Java Web的开发完成后,以前我们都会打包成war文件,然后放大web容器,比如tomcat、jetty这样的容器。现在基于SpringBoot
    的头像 发表于 10-07 15:47 255次阅读

    Spring Boot Actuator快速入门

    不知道大家在写 Spring Boot 项目的过程中,使用过 Spring Boot Actuator 吗?知道 Spring
    的头像 发表于 10-09 17:11 348次阅读

    Spring Boot启动 Eureka流程

    在上篇中已经说过了 Eureka-Server 本质上是一个 web 应用的项目,今天就来看看 Spring Boot 是怎么启动 Eureka 的。 Spring
    的头像 发表于 10-10 11:40 422次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>启动 Eureka流程

    Spring Boot的启动原理

    spring-boot-maven-plugin 的 maven 项目打包插件,可以方便的将 Spring Boot 项目打成 jar 包。这样我们就不再需要部署 Tomcat 、Jetty等之类的
    的头像 发表于 10-13 11:44 377次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的启动原理

    Spring Boot 的设计目标

    什么是Spring Boot Spring BootSpring 开源组织下的一个子项目,也是 S
    的头像 发表于 10-13 14:56 315次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的设计目标

    Spring事务传播性的相关知识

    本文主要介绍了Spring事务传播性的相关知识
    的头像 发表于 01-10 09:29 170次阅读
    <b class='flag-5'>Spring</b>事务传播性的<b class='flag-5'>相关</b><b class='flag-5'>知识</b>