Featured image of post 全栈开发日志 Part.1

全栈开发日志 Part.1

Spring Boot:开发环境配置及Controller的使用

开发环境配置及Controller的使用

介绍、特点

  • Spring Boot是由Pivotal团队提供的基于Spring的全新框架,旨在简化Spring 应用的初始搭建和开发过程。

  • Spring Boot是所有基于Spring开发项目的起点。

  • Spring Boot就是尽可能地简化应用开发的门槛,让应用开发、测试、部署变得 更加简单。

  • 遵循 “约定优于配置” 的原则。

  • spring-boot-starter-web启动器主要包括webwebmvcjsontomcat等 基础依赖组件,作用是提供Web开发场景所需的所有底层依赖。 webmvcWeb开发的基础框架,JSON数据解析组件,tomcat为自带的容器依赖。

开发环境热部署

在开发中不可避免的需要频繁修改类文件,借助spring-boot-devtools可以使得无需手动重启应用即可重新编译,启动项目。

devtools会监听classpath下的文件变动,触发Restart类加载器重新加载该类,达到热部署的目的。

特别的: 并不是所有的更改都需要重启应用(如静态资源、视图模板),可以通过设置spring.devtools.restart.exclude属性来指定一些文件或目录的修改不用重启应用。

添加以下依赖以使用(gradle):

1
implementation 'org.springframework.boot:spring-boot-devtools:4.0.1'

application.properties中添加

1
2
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java

IDEA中需要修改构建、执行、部署->编译器->自动构建项目高级设置->即使开发的应用程序当前正在运行,也允许自动make启动True

MVC设计模式

MVC 是 Model(模型)、View(视图)、Controller(控制器)的缩写,它把应用程序拆分成三个独立但协作的部分,用 “餐厅” 来形象理解:

  • Model(模型):后厨(处理核心数据和业务逻辑,比如食材存储、菜品制作规则,不关心谁来点餐、怎么上菜)。
  • View(视图):餐厅的菜单 / 餐桌(只负责展示内容,比如把菜品信息展示给顾客,不处理点餐逻辑,也不制作菜品)。
  • Controller(控制器):服务员(接收顾客的点餐请求,告诉后厨做什么菜,做好后再告诉前台怎么端给顾客,自己不做菜也不展示菜单)。

Controller

Spring Boot提供了@Controller@RestController两种注解来标识此类负责 接收和处理HTTP请求。

如果请求的是页面和数据,使用@Controller注解即可;如果只是请求数据,则可以使用@RestController注解。

特别的: 在前后端分离的项目中,@RestController使用的更加广泛。

示例

以下是一个Controller的示例代码:

1
2
3
4
5
6
7
8
@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

访问http://域名/hello即可查看。

默认情况下,如果返回的是一个对象,那么会自动的转为JSON

路由映射

@RequestMapping注解主要负责URL的路由映射。它可以添加在Controller类或者具体的方法上。如果添加在Controller类上,则这个Controller中的所有路由映射都将会加上此映射规则,如果添加在方法上,则只对当前方法生效。

@RequestMapping注解包含很多属性参数来定义HTTP的请求映射规则。常用的属性参数如下:

  • value:请求URL的路径,支持URL模板、正则表达式。

  • method:HTTP请求方法。

  • consumes:请求的媒体类型(Content-Type),如application/json

  • produces:响应的媒体类型。

  • paramsheaders:请求的参数及请求头的值。

@RequestMapping也支持通配符 *?**

  • *匹配任意字符,**匹配任意路径,?匹配单个字符。

  • 无通配符的匹配顺序高于有通配符的,*高于**

参数的传递

@RequestParam:将请求参数绑定到控制器的方法参数上,接收的参数来自 HTTP请求体或请求urlQueryString,当请求的参数名称与Controller的业务 方法参数名称一致时,@RequestParam可以省略。 @PathVaraible:用来处理动态的URLURL的值可以作为控制器中处理方法 的参数。 @RequestBody:接收的参数是来自requestBody中,即请求体。一般用于处理 非Content-Type:application/x-www-form-urlencoded编码格式的数据,比如:application/jsonapplication/xml等类型的数据。

QueryString类似于如下形式:

1
http://localhost:8080/hello?nickname=zhangsan&phone=123

即有一个标志?来传递,具体的用法参照下面的示例。

示例

访问http://localhost:8080/hello?nickname=zhangsan&phone=123

1
2
3
4
@RequestMapping(value = "/getData",method = RequestMethod.GET)
public String getData(String nickname,String phone){
    return "hello" + nickname + phone;
}
  • 其中value是默认的,只有一个时可以略去不写。

  • 形参列表中的nicknamephoneQueryString中的参数名匹配的时候,会自动匹配,如果参数名不匹配的时候,参考如下写法:

1
2
3
4
@RequestMapping(value = "/getData",method = RequestMethod.GET)
public String getData(@RequestParam(value = "nickname",required = false) String name){
    return "hello" + name;
}
  • 其中@RequestParam注解存在时,该参数默认视为必须的,改变需要额外写required = false
  • 当传递的参数太多时,应当封装为对象,但注意变量名的对应。
  • Content-Type:application/x-www-form-urlencoded的数据对象一般需要在参数前面加上@RequestBody注解,比如处理json的时。

TIP:

@RequestMapping(value = "/getData",method = RequestMethod.GET)注解等价于@GetMapping("/hello")

本作品采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可(CC BY-NC-SA 4.0)
文章浏览量:Loading
Powered By MC ZBD Studio
发表了57篇文章 · 总计111.20k字
载入天数...载入时分秒...
总浏览量Loading | 访客总数Loading

主题 StackJimmy 设计
由ZephyrBD修改