【SpringBoot】五:Web服务---SpringMVC---控制器

这篇具有很好参考价值的文章主要介绍了【SpringBoot】五:Web服务---SpringMVC---控制器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 控制器介绍

(1)什么是控制器?
控制器是一种由Spring 管理的 Bean 对象,赋予角色是“控制器”。作用是处理请求,接收浏览器发送过来的参数,将数据和视图应答给浏览器或者客户端 app 。
控制器是一个普通的 Bean,使用@Controller 或者@RestController 注释。@Controller 被声明为@Component。所以它就是一个 Bean 对象。

(2)如何创建控制器
在java类上加入@Controller或者@RestController。
其中@RestController包含@Controller,@RestController在@Controller基础上加入了@ResponseBody
【SpringBoot】五:Web服务---SpringMVC---控制器
【SpringBoot】五:Web服务---SpringMVC---控制器

2 控制器工作流程

【SpringBoot】五:Web服务---SpringMVC---控制器

3 控制器中的方法

  • 注解@RequestMapping(value=“请求的url地址”):表示这个url的请求由当前方法去处理
    @GetMapping @PostMapping @PutMapping @DeleteMapping
  • 控制器方法的形参,接收请求参数,多种方法接收请求参数
  • 控制方法的返回值,表示应答的结果(包括数据,或者视图)。

4 匹配请求路径到控制器方法

(1)路径匹配策略

有path_pattern_parser(性能好)和ant_pattern_parser
【SpringBoot】五:Web服务---SpringMVC---控制器
(2)path_pattern_parser规定的关于uri的定义

通配符:
? : 一个字符
* : 0 或多个字符。在一个路径段中匹配字符
**:匹配 0 个或多个路径段,相当于是所有
正则表达式: 支持正则表达

(3)RESTFul 的支持路径变量

  • {变量名}
  • {myname:[a-z]+}: 正则匹配 a-z 的多个字面,路径变量名称“myname”。@PathVariable(“myname”)
  • {*myname}: 匹配多个路径一直到 uri 的结尾
通配符 匹配
匹配只有一个字符
* 匹配一个路径段中的 0 或多个字
** 匹配 0 或多段路径
@GetMapping(“/order/{*id}”) {*id} 匹配 /order 开始的所有请求, id 表示 order 后面直到路径末尾的所有内容。id 自定义路径变量名称。与@PathVariable 一样使用
@GetMapping(“/pages/{fname:\\w+}.log”)

表中红色是正则表达式。

5 RequestMapping

  • value:别名 path 表示请求的
  • method:请求方式,支持 GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE。

如果不用method,可以使用如下的快捷注解代替:
@GetMapping: 表示 get 请求方式的@RequestMapping
@PostMapping:表示 post 请求方式的@RequestMapping
@PutMapping:表示 put 请求方式的@RequestMapping
@DeleteMapping: 表示 delete 请求方式的@RequestMapping

6 控制器方法参数类型与可用返回值类型

7 接收请求参数

接收请求参数的方式:
 请求参数与形参一一对应,适用简单类型。形参可以有合适的数据类型,比如 String,Integer ,int 等。
 对象类型,控制器方法形参是对象,请求的多个参数名与属性名相对应。
 @RequestParam 注解,将查询参数,form 表单数据解析到方法参数,解析 multipart 文件上传。
 @RequestBody,接受前端传递的 json 格式参数。
 HttpServletRequest 使用 request 对象接受参数, request.getParameter(“…”)
 @RequestHeader ,从请求 header

(1)一对一

【 ParameterController.java】
【SpringBoot】五:Web服务---SpringMVC---控制器

(2)使用对象
【ParameterController.java】
【SpringBoot】五:Web服务---SpringMVC---控制器

(3)使用HttpServletRequest
【ParameterController.java】
【SpringBoot】五:Web服务---SpringMVC---控制器

(4)使用@RequestParam
【ParammaterController.java】
【SpringBoot】五:Web服务---SpringMVC---控制器

(5)使用@RequestHeader
控制器方法:
【SpringBoot】五:Web服务---SpringMVC---控制器

相应结果
【SpringBoot】五:Web服务---SpringMVC---控制器

(6) 使用@RequestBody
【SpringBoot】五:Web服务---SpringMVC---控制器
(7)Reader-InputStream
【SpringBoot】五:Web服务---SpringMVC---控制器
(8)数组参数
【SpringBoot】五:Web服务---SpringMVC---控制器

8 验证参数

8.1 Bean Validation

(1)添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

(2)使用Bean Validation

package com.sdnu.quickweb.vo;

import lombok.Data;

import javax.validation.constraints.*;

@Data
public class ArticleVO {

    //文章主键
    private Integer id;

    @NotNull(message = "必须有作者")
    private Integer userId;

    //同一个属性可以指定多个注解
    @NotBlank(message = "文章必须有标题")
    //@Size 中 null 认为是有效值.所以需要@NotBlank
    @Size(min = 3,max = 30,message = "标题必须 3 个字以上")
    private String title;

    @NotBlank(message = "文章必须副标题")
    @Size(min = 8,max = 60,message = "副标题必须 30 个字以上")
    private String summary;

    @DecimalMin(value = "0",message = "已读最小是 0")
    private Integer readCount;

    @Email(message = "邮箱格式不正确")
    private String email;
}
package com.sdnu.quickweb.controller;

import com.sdnu.quickweb.vo.ArticleVO;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class ArticleController {
    @RequestMapping("/article/add")
    public Map<String, Object> articleAdd(@Validated @RequestBody ArticleVO articleVO, BindingResult br) {
        // service方法处理文章业务
        // 返回数据
        Map<String, Object> errorMap = new HashMap<>();
        if (br.hasErrors()) {
            List<FieldError> list = br.getFieldErrors();
            list.forEach(fieldError -> {
                errorMap.put(fieldError.getField(), fieldError.getDefaultMessage());
            });
        }
        return errorMap;
    }
}

测试:
【SpringBoot】五:Web服务---SpringMVC---控制器
测试结果:
【SpringBoot】五:Web服务---SpringMVC---控制器

8.2 分组校验

AddArticleGroup和EditArticleGroup的区别是id的校验不同,其它相同
vo:
【SpringBoot】五:Web服务---SpringMVC---控制器
controller控制器:
【SpringBoot】五:Web服务---SpringMVC---控制器
测试AddArticleGroup
【SpringBoot】五:Web服务---SpringMVC---控制器
测试EditArticleGroup
【SpringBoot】五:Web服务---SpringMVC---控制器文章来源地址https://www.toymoban.com/news/detail-451416.html

8.3 ValidationAutoConfiguration

到了这里,关于【SpringBoot】五:Web服务---SpringMVC---控制器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s进阶之路-控制器无状态服务:

    RC/RS/Deployment 控制器 deployment 无状态(最常用):    nginx和Apache statefulset 有状态: mysql和redis damonset 初始化 job 一次性任务 cronjob 任务计划 1无状态:不会对本地环境产生依赖如:nginx和Apache 3.RC、RS和 Deployment 区别 :   RC和RS : 动态更新pod副本数      管理pod,控制pod怎么

    2024年02月19日
    浏览(44)
  • web中为什么要引入service层以及前端控制器DispatchServlet的作用以及原理剖析

    review: 最初的做法是: 一个请求对应一个Servlet,这样存在的问题是servlet太多了 把一些列的请求都对应一个Servlet, IndexServlet/AddServlet/EditServlet/DelServlet/UpdateServlet - 合并成FruitServlet 通过一个operate的值来决定调用FruitServlet中的哪一个方法 使用的是switch-case 在上一个版本中,Ser

    2024年02月04日
    浏览(41)
  • K8s: Ingress对象, 创建Ingress控制器, 创建Ingress资源并暴露服务

    Ingress对象 1 )概述 Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP Ingress-nginx 本质是网关,当你请求 abc.com/service/a, Ingress 就把对应的地址转发给你,底层运行了一个 nginx 但 K8s 为什么不直接使用 nginx 呢,是因为 K8s 也需要把转发的路由规则纳入

    2024年04月28日
    浏览(45)
  • 实时在线云消费机、考勤门禁控制器、网络读卡器服务端C# Socket源码

      消费机UDP通讯协议介绍: 设备向服务器发送的指令格式,每个字段用半角逗号(,)分隔。 序号 指令名称 指令格式 指令说明 示例 1 响应服务器的搜索 100,包序列号,终端IP,子网掩码,网关IP,远程电脑主机IP,端口号,终端硬件号 响应电脑发出的搜寻局域网内所有终端设备指令000

    2024年02月10日
    浏览(53)
  • Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务

    目录 Pod 参考文档:Pod | Kubernetes Pod配置文件:simple-pod.yaml 对master进行如下操作 Pod的状态有: 参考文档:(70条消息) Pod生命周期中的状态解释_pod状态_闹玩儿扣眼珠子的博客-CSDN博客 进入Pod内的nginx容器: 当我们创建一个Pod,其中的步骤是什么?(启动Pob的流程) 大概步骤:

    2024年02月13日
    浏览(71)
  • AD域控制器将辅域控制器角色提升为主域控制器

    域控服务器迁移,已将新机器添加为该域的辅域控制器。 主域控制器:test-dc-01 辅域控制器:test-dc-02 需求将主辅域的角色进行互换,test-dc-01更换为辅域,test-dc-02更换为主域。 方法1 命令行修改AD域角色 1.查看当前主域控制器是哪台机器,查询命令 netdom query fsmo 可以看到当前

    2024年02月12日
    浏览(60)
  • Unity 第三人称 玩家控制器+相机控制器

    今天给大家分享一个简单的Unity第三人称视角下玩家控制器和相机控制器的脚本编写方法。   效果如下: 主要分三部分实现:人物旋转、人物移动、相机旋转。 1.人物移动: 首先获取到人物水平和垂直移动的参数: 因为人物移动的方向跟摄像头一致,所以需要根据摄像头的

    2024年02月06日
    浏览(82)
  • 18-k8s控制器资源-cronjob控制器

            job控制器是执行完一次任务,就结束;         cronjob控制器,是基于job控制器,定期频率性执行任务;等同于linux系统中的crontab一样; [root@k8s231 pi]# vim cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata:   name: xinjizhiwa spec:   schedule: \\\"* * * * *\\\"   #定义job的模板   jobTemplate

    2024年02月22日
    浏览(72)
  • 15-k8s控制器资源-deployment/部署控制器

            在学习rc和rs控制器资源时,我们指导,这两个资源都是控制pod的副本数量的,但是,他们两个有个缺点,就是在部署新版本pod或者回滚代码的时候,需要先apply资源清单,然后再删除现有pod,通过资源控制,重新拉取新的pod来实现回滚或者迭代升级;         那么

    2024年02月21日
    浏览(70)
  • 14-k8s控制器资源-rs控制器replicasets

            replicaset副本控制器,简称:rs控制器;         用法:与rc控制器“几乎”相同;         能力:可以指定pod的副本始终存活,相比于rc控制器;支持标签匹配,也支持标签表达式         注意:不论是rc还是rs资源,都是通过“标签”惊醒匹配pod的,如果有同样

    2024年02月21日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包