控制层类上的注解、业务层的注入、URL映射、参数接收、返回数据及网页模板、RESTful

news2025/1/7 23:30:59

控制类的作用: 处理http的请求,从HTTP请求中获得信息,提取参数,并分发给不同的处理服务,处理之后封装成一个Model ,然后再把该Model返回给对应的View进行展示。

控制层类上的注解

@Controller:创建的类上添加注解@Controller表示这是一个控制层类,返回数据的方式既可以是JSON/xml数据,也可以是页面模板;【用的最多】
@RestController:创建的类上添加注解@Controller表示这是一个控制层类,返回数据的方式只能是JSON/xml数据;
两者的关系: @Controller+@ResponseBody=@RestController

业务层的注入

@Resource:默认byName 注入的方式,适用于接口只能有一个实现类,名称是@Service注解中标定的名称,如果通过 byName 的方式匹配不到,再按 byType 的方式去匹配。如@Resource(name=“companyService”),这里的“companyService”是业务层实现类里面@Service注解中标定的名称。【用的最多】
@Qualifier:byName 注入的方式,但名称是类名,适用于接口有多个实现类的场景,@Qualifier(name=“CompanyService”)
@Autowired: byType 注入方式,要求接口只能有一个实现类,Spring会按 byType的方式寻找接口的实现类,如果有多个实现类,Spring不知道要引入哪个类,自然就会报错。

URL映射

@RequestMapping:表示将特定的URL映射到指定的方法;如:@RequestMapping(“/CompanyModule”)
@GetMapping:只接收Get方式的URL映射,相当于@RequestMapping(value = “/test/hello”,method = RequestMethod.Get)
@PostMapping:只接收Post方式的URL映射,相当于@RequestMapping(value = “/test/hello”,method = RequestMethod.POST)
注意: URL映射中带不带“/”的问题,带不带都行,规范要求来说应该带,不加“/”会去当前路径下找

参数接收

1、JavaBean对象:没有任何注释,直接通过JavaBean对象来封装表单参数或者是请求url路径中的参数,如:public void save(Company company)

 @PostMapping("save")
 @ResponseBody
 public void save(Company company)
 {
     /**
      * 接收表单,保存公司信息
      * 参数接收:JavaBean对象的方式:没有任何注释,直接通过JavaBean对象来封装表单参数或者是请求url路径中的参数,如:public void save(Company company)
      * JavaBean对象的方式:一定要在后端有一个实体类才能接收到参数
      */
     csi.save(company);
 }

2、@RequestParam:用于获取Request参数,也就是URL中的最后一部分,形如:?xx=yy&zz=ww;

@GetMapping("/delete")
@ResponseBody
public void delete(@RequestParam String uuid)
{
    /**
     * 根据接收到的uuid字符串,删除对应的数据库记录
     * 参数接收:@RequestParam:用于获取Request参数,也就是URL中的最后一部分,形如:?xx=yy&zz=ww;
     * postman测试:http://localhost:8080/CompanyModule/delete?uuid=3416231899607189874
     */
    csi.delete(uuid);
}

3、@RequestBody:直接以String方式接收前端以Post方式传过来的JSON数据,在需要传递大量参数时,很有用,类似于JavaBean对象,差别在于,这种方式传递参数,不需要JavaBean对象来封装参数,适用于多条件查询场景,一般用Map集合来处理接收的参数,如下:public String findAllSimplePageMap(@RequestBody(required = false) Map<String,Object> reqMap)

@PostMapping("/multiQuery")
@ResponseBody
public Map<String,Object> multiQuery(@RequestBody(required = false) Map<String,Object> redMap){
    String a1 = redMap.get("a1").toString();
    String a2 = redMap.get("a2").toString();
    String a3 = redMap.get("a3").toString();
    String a4 = redMap.get("a4").toString();
    return redMap;
}

在这里插入图片描述
4、@PathVariable:用于获取URL变量:一般{ }中的变量名与方法中的形参名一致,用于RESTful设计风格;

返回数据及网页模板

@ResponseBody:返回JSON格式的数据,方法上不加该注解,返回的就是templates文件夹下面的网页,如果是返回网页模板,.html后缀可以不带,不过为了明显,建议还是带上.html;
返回公共网页: 如return “redirect:/newdemo.html”;这里的路径默认是指resource资源文件夹下public文件夹下的网页;
返回安全文件夹templates文件夹下的网页: 不区分是Thymeleaf网页模板还是普通网页,如return “mydemo.html”;

RESTful设计风格

特别提醒: 如果不是从资源考虑、对缓存的要求也不高,强烈建议不要采用RESTful风格的设计,至于原因,大家可以考虑有多查询条件的场景处理就明白是有多绕,你不是使用资源进行系统建模,不是以资源的角度来进行设计,自然遇到问题的时候就不会从资源的角度去考虑,最后和REST需要的资源第一位的观点冲突,把自己绕死,这种伪REST其实很要不得。
映射方式除了GetMapping、PostMapping,还有PutMapping、DeleteMapping ,这四种方式的作用如下:
1、PostMapping 用于增删改查的 增
2、GetMapping 用于增删改查的 查
3、PutMapping 用于增删改查的 改
4、DeleteMapping 用于增删改查的 删
提示:在用Post测试RESTful风格的接口时,有别传统的方式,只需注意两点就行
(1)参数的传递形式:不能带参数名称,直接在url后面带参数值就行,如下:
在这里插入图片描述
(2)中文转码方式:Postman不能直接传中文值,中文值需要转码,如下
在这里插入图片描述
转码成功后,就可以点“Send”了,如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科技爱好者周刊之爱好者记录

前言 平时浏览的内容杂七杂八&#xff0c;说好听一些叫做“内容丰富&#xff0c;涉猎甚广”&#xff0c;实际一些则是受到主流大环境的冲击加之自身的控制力尚且不足。 有过类似经历的人大多知道&#xff0c;碎片化的信息除了填充大脑的冗余空间&#xff0c;在短期时间内就会被…

AMBA低功耗接口规范(Low Power Interface Spec)

1.简介 AMBA提供的低功耗接口&#xff0c;用于实现power控制功能。目前AMBA里面包含2种低功耗接口&#xff1a; Q-Channel&#xff1a;实现简单的power控制&#xff0c;如上电&#xff0c;下电。 P-Channel&#xff1a;实现复杂的power控制&#xff0c;如全上电&#xff0c;半上…

今天面了个腾讯拿28K出来的,让我见识到了测试基础的天花板...

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。 一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。 看简历很多都是3年工作经验&#xff0c;但…

每天10个前端小知识 【Day 17】

前端面试基础知识题 1.使用原生js实现以下效果&#xff1a;点击容器内的图标&#xff0c;图标边框变成border:1px solid red&#xff0c;点击空白处重置 const box document.getElementById(box); function isIcon(target) { return target.className.includes(icon); } b…

【Unity VR开发】结合VRTK4.0:设置抓取时可交互对象的方向

语录&#xff1a; 取酒酿晚风&#xff0c;赠我一场空。 前言&#xff1a; 获取可交互对象的默认方法是将可交互对象的原点与交互器的原点对齐。此机制适用于基本抓取&#xff0c;但有时当您想要抓取某个对象时&#xff0c;您可能希望将可交互对象定向到特定位置并旋转到交互器…

【免费教程】SWAT模型及在面源污染中的应用与案例分析

SWATSWAT&#xff08;Soil and Water Assessment Tool&#xff09;是由美国农业部&#xff08;USDA&#xff09;的农业研究中心Jeff Arnold博士1994年开发的。模型开发的最初目的是为了预测在大流域复杂多变的土壤类型、土地利用方式和管理措施条件下&#xff0c;土地管理对水分…

mysql 按时间倒排序深翻页思考

背景深翻页&#xff0c;可以用id做为偏移量&#xff0c;但如果是uuid时&#xff0c;或需求是要按时间排序时&#xff0c;深翻页就是一个问题了。如果要按最后修改时间倒排序&#xff0c;把时间做索引是可以&#xff0c;但有可能时间是有重的&#xff0c;这样结果就可能不准确这…

【Deformable Convolution】可变形卷积记录

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 可变形卷积记录 1. 正文 预印版&#xff1a; Deformable Convolutional Networks v1 Deformable ConvNets v2: More Deformable, Better Results 发表版…

【郭东白架构课 模块一:生存法则】05|法则二:研发人员的人性需求是如何影响架构活动成败的?

你好&#xff0c;我是郭东白。上节课我们学习了马斯洛关于人性的理论&#xff0c;那么这节课我们就利用这个理论来看看我们在架构活动中应该注意些什么。 架构设计必须符合人性&#xff0c;而在架构活动中&#xff0c;与“人”相关的主要就是研发人员和目标用户。那么今天这节…

大数据全方位学习路线

大数据全方位学习路线 一、大数据处理流程 上图是一个简化的大数据处理流程图&#xff0c;大数据处理的主要流程包括数据收集、数据存储、数据处理、数据应用等主要环节。下面我们逐一对各个环节所需要的技术栈进行讲解&#xff1a; 1.1 数据收集 大数据处理的第一步是数据的收…

23- 条件随机场CRF (NLP算法) (算法)

CRF模型构建 : crf sklearn_crfsuite.CRF(c1 0.1,c2 0.1,max_iterations100,all_possible_transitionsTrue) crf.fit(X_train,y_train) 1、条件随机场CRF概述 将之前所有的观测作为未来预测的依据是不现实的&#xff0c;因为其复杂度会随着观测数量的增加而无限制地增长。因…

【C++提高编程】C++全栈体系(二十)

C提高编程 第三章 STL - 常用容器 二、vector容器 1. vector基本概念 功能&#xff1a; vector数据结构和数组非常相似&#xff0c;也称为单端数组 vector与普通数组区别&#xff1a; 不同之处在于数组是静态空间&#xff0c;而vector可以动态扩展 动态扩展&#xff1a…

小菜版考试系统——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是小菜版考试系统&#xff0c;最近一直在忙C语言课程设计的事&#xff0c;那么&#xff0c;就请uu们看看我的学习成果吧。 课程设计任务 摘要 题目分析 流程图 关键程序代码 程序运行结果 结论与心得 参…

JVM08 StringTable

StringTable String的基本特性 String&#xff1a;字符串&#xff0c;使用一对 ”” 引起来表示 String s1 “mogublog” ; // 字面量的定义方式String s2 new String(“moxi”); string声明为final的&#xff0c;不可被继承String实现了Serializable接口&#xff1a;表示字…

python 调用 dll 出现精度问题

问题&#xff1a;python 在调用dll 的时候出现了精度问题 总结&#xff1a;使用decimal库进行转换就可以正常传递。 ‘ 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 ’ 遇到的问题具体情况 dll 生成函数…

手机棋牌游戏开发的流程是怎样的?

最近几年&#xff0c;随着网络游戏的兴起&#xff0c;棋牌手游开发也越来越受欢迎&#xff0c;在国内&#xff0c;几乎随处可见从事手游和手游的公司。不过&#xff0c;虽然公司和产品很多&#xff0c;但效果也不一样&#xff0c;区别就在于&#xff0c;他们能不能掌握好这款游…

实现一个更快的终端彩色文本格式化工具库

终端中打印的五颜六色的彩色文本&#xff0c;你知道是怎么实现的吗&#xff0c;你都知道或用过哪些相关的工具库呢&#xff1f;来一起了解一下吧&#xff01; 在前端项目开发中&#xff0c;说到控制台终端彩色文本格式化&#xff0c;你可能会想到 chalk、picocolors、ansi-colo…

ElasticSearch入门安装与SpringBoot集成实战

介绍 Elasticsearch 是一个实时分布式搜索和分析引擎&#xff0c;一般用于全文搜索、结构化搜索&#xff0c;分析或者三者混用。 它的底层是基于Apache Lucene&#xff08;TM&#xff09;的开源搜索引擎&#xff0c;但是lucene只是一个库&#xff0c;需要java开发然后集成到应…

LeetCode刷题复盘笔记—一文搞懂贪心算法之452. 用最少数量的箭引爆气球(贪心算法系列第十一篇)

今日主要总结一下可以使用贪心算法解决的一道题目&#xff0c;452. 用最少数量的箭引爆气球 题目&#xff1a;452. 用最少数量的箭引爆气球 Leetcode题目地址 题目描述&#xff1a; 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#…

备战蓝桥杯【二维前缀和】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…