Spring Boot—Controller 注解
Controller 是 Spring 中最基本的组件,主要是处理跟用户交互的,一般每个业务逻辑都会有一个 Controller,提供给用户 http 请求接口,用户请求接口进行数据访问。
掌握Controller的用法,一般掌握下面几个注解就差不多了,@Controller
,@RestController
,@RequestMapping
,@PathVariable
,@RequestParam
,@GetMapping。
下面详细说下这些注解的用法:
目录
1. @Controller
2. @RestController
3. @ResquestMapping
4. @PathVariable
5. @RequestParam
6. 组合注解
1. @Controller
标注 Controller 类,处理 http 请求
@Controller
//@ResponseBody
public class HelloController {@RequestMapping(value="/hello",method= RequestMethod.GET)public String sayHello(){return "hello";}
}
如果直接使用@Controller这个注解,当运行该SpringBoot项目后,在浏览器中输入:local:8080/hello,会得到如下错误提示:
出现这种情况的原因在于:没有使用模版。即@Controller 用来响应页面,@Controller必须配合模版来使用。spring-boot 支持多种模版引擎包括:
1,FreeMarker
2,Groovy
3,Thymeleaf (Spring 官网使用这个)
4,Velocity
5,JSP (貌似Spring Boot官方不推荐,STS创建的项目会在src/main/resources 下有个templates 目录,这里就是让我们放模版文件的,然后并没有生成诸如 SpringMVC 中的webapp目录)
本文以Thymeleaf为例介绍使用模版,具体步骤如下:
第一步:在pom.xml文件中添加如下模块依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
第二步:修改控制器代码,具体为:
@Controller
public class HelloController {@RequestMapping(value="/hello",method= RequestMethod.GET)public String sayHello(){return "hello";}
}
第三步:在resources目录的templates目录下添加一个hello.html文件,具体工程目录结构如下:
hello.html文件中的内容为:
<h1>hello wo jiao zhangkeluo</h1>
再次运行此项目之后,在浏览器中输入:localhost:8080/hello
就可以看到hello.html中所呈现的内容了。
现在都是前后端分离,后端主要负责处理Restful请求,然后返回JSON格式的数据,所有一般不会使用模版了。
2. @RestController
标注 Controller 类,spring 4 新加注解,相当于@Controller
+ @ResponseBody
,主要是为了使 http 请求返回数据格式为 json 格式,正常情况下都是使用这个注解。
@RestController
public class HelloController {@RequestMapping(value="/hello",method= RequestMethod.GET)public String sayHello(){return "hello";}
}
与下面的代码作用一样:
@Controller
@ResponseBody
public class HelloController {@RequestMapping(value="/hello",method= RequestMethod.GET)public String sayHello(){return "hello";}
}
3. @ResquestMapping
配置 url 映射,可以作用在控制器的某个方法上,也可以作用在此控制器类上。当控制器在类级别上添加@RequestMapping注解时,这个注解会应用到控制器的所有处理器方法上。处理器方法上的@RequestMapping注解会对类级别上的@RequestMapping的声明进行补充。
例子一:@RequestMapping仅作用在处理器方法上
@RestController
public class HelloController {@RequestMapping(value="/hello",method= RequestMethod.GET)public String sayHello(){return "hello";}
}
sayHello所响应的url=localhost:8080/hello。
例子二:@RequestMapping仅作用在类级别上
@Controller
@RequestMapping("/hello")
public class HelloController {@RequestMapping(method= RequestMethod.GET)public String sayHello(){return "hello";}
}
sayHello所响应的url=localhost:8080/hello,效果与例子一一样,没有改变任何功能。
例子三:@RequestMapping作用在类级别和处理器方法上
@RestController
@RequestMapping("/hello")
public class HelloController {@RequestMapping(value="/sayHello",method= RequestMethod.GET)public String sayHello(){return "hello";}@RequestMapping(value="/sayHi",method= RequestMethod.GET)public String sayHi(){return "hi";}
}
sayHello所响应的url=localhost:8080/hello/sayHello。
sayHi所响应的url=localhost:8080/hello/sayHi
4. @PathVariable
获取 url 中的数据,我们在 url 中拼接一个字符串 {username}
,类似于地址占位符,由用户请求时添加,请求获取。注意注解中的参数必须与占位符参数一致;
@RestController//处理http请求,返回json格式
@RequestMapping(value = "/users")//配置url,让该类下的所有接口url都映射在/users下
public class UserController {@RequestMapping(value = "/myInfo/{username}", method = RequestMethod.GET)public String say(@PathVariable("username") String username) {return username;}
}
此时接口 url 为:http://127.0.0.1:8080/users/myInfo/张克落
,请求方法 GET
结果:浏览器上显示 张克落
5. @RequestParam
获取请求参数值,方法随意可以设置,但是通常需求都是使用 POST
请求处理表单提交。
@RestController//处理http请求,返回json格式
@RequestMapping(value = "/users")//配置url,让该类下的所有接口url都映射在/users下
public class UserController {@RequestMapping(value = "/myInfo", method = RequestMethod.POST)public String say(@RequestParam(value = "username") String username, @RequestParam(value = "password") String password) {return username + password;}
}
此时 接口 url 为:http://127.0.0.1:8080/users/myInfo?username=张克落&password=123456
请求方法:POST
,注意拼接地址参数必须与注解参数一致
使用 postman 来测试接口,结果为,输出 张克落123456
这时候假如用户没有传参数,就会报404
错误。再添加两个设置 required = false
:是否必穿。defaultValue
:默认值。
@RestController//处理http请求,返回json格式
@RequestMapping(value = "/users")//配置url,让该类下的所有接口url都映射在/users下
public class UserController {@RequestMapping(value = "/myInfo", method = RequestMethod.POST)public String say(@RequestParam(value = "username",required = false,defaultValue = "张克落") String username,@RequestParam(value = "password",required = false,defaultValue = "123456") String password) {return username + password;}
}
6. 组合注解
@GetMapping
,@PostMapping
,@PutMapping
等 由请求方法+Mapping
的组合注解等价于 @RequestMapping
单独指定映射再指定请求方法。这种方式简化了我们的使用,通常都是直接使用组合注解,不需要再自己指定请求方法,毕竟程序猿都是比较懒的嘛~
例如:
@RequestMapping(value = "/myInfo", method = RequestMethod.POST)
可以简化为:
@PostMapping(value = "/myInfo")
参考:
https://www.jianshu.com/p/ea512f634fd6
https://blog.csdn.net/u010412719/article/details/69788227
https://blog.csdn.net/u010412719/article/details/69710480
Spring Boot—Controller 注解相关推荐
- 40 个 Spring Boot 常用注解
以下文章来源方志朋的博客,回复"666"获面试宝典 作者 | 谭朝红 链接 | ramostear.com 一.Spring Web MVC 与 Spring Bean 注解 Sp ...
- Spring Boot 核心注解与配置文件
一.入口类与@SpringBootApplication 注解 Spring Boot项目都会有一个*Application 类,这个类作为Spring Boot 项目的入口类,在这个入口类中有mai ...
- Spring Boot @Conditional 注解
Spring Boot @Conditional注解 @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件的才给容器注册Bean. @Conditional ...
- idea提示未配置 Spring Boot 配置注解处理器解决方法
未配置 Spring Boot 配置注解处理器 解决方法: 在pom.xml里添加依赖 <dependency><groupId>org.springframework.boo ...
- spring boot 相关注解
spring boot是基于spring 开发的,因此,spring boot工程中可以使用spring 的注解.除了spring注解外,spring boot会使用到的注解有: @SpringBoo ...
- spring boot controller 初始化_使用 Spring 快速创建 web 应用的两种方式
介绍 本篇文章主要介绍,如何使用 Spring 开发一个 Web 应用. 我们将研究用 Spring Boot 开发一个 web 应用,并研究用非 Spring Boot 的方法. 我们将主要使用 J ...
- Spring Boot Controller
接上篇文章,HelloWorld程序中我们已经创建了一个HellController,里面包含了响应JSON的方法,本文针对Controller再做一下讲解. 回顾上篇文章,我们在Controller ...
- Spring/Spring Boot 常用注解总结
0.前言 可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我都说了具体用法,掌握搞懂,使用 SpringBoot ...
- Spring Boot 条件注解@Conditional介绍
一.概述 Spring Boot 是自以为是的,当 Spring Boot 在classpath中找到相关依赖项时,它会为模块提供默认(自动)配置. 举例,Spring Boot 提供了: 如 cla ...
- Spring Boot @PropertySource注解加载指定配置文件(五)
我们可以通过@ConfigurationProperties和@Value两个注解获取主配置文件application.properties 或 apllication.yml中的配置信息,但是如果我 ...
最新文章
- 【机器学习基础】(四):通俗理解支持向量机SVM及代码实践
- kali-linux下搭建DVWA环境
- windows server如何加强云服务器的安全性
- 什么配置的电脑可满足基因组索引构建的需求?
- Java后端测试概述
- AcWing 1208. 翻硬币
- 简要分析武汉一起好P2P平台的核心功能
- VirtualBox安装的Mac虚拟机,安装增强功能失败,应该是版本太新
- win10系统下360加速球不显示网速解决方法
- 怎么篡改计算机硬盘大小,怎么样更改Parallels Desktop硬盘大小 Parallels Desktop虚拟机硬盘大小如何更改...
- IMO 2017 T4解答
- 在EXCEL中的第二列如何排出第一列的名次
- R语言剔除包含NA值的行
- JAVA中传值与“传引用“辨析
- HTML5纯css实现爱心动画效果DW、vscode来自程序员的浪漫表白
- Mac版 XMind 去除【试用模式】水印
- python牛顿迭代法应用_浅谈牛顿迭代法与编程
- 【uview calendar日历 】 u-view 2.0 的日历组件默认是无法选择当天之前的日期,解决方法
- 企业律师事务官方介绍网站源码
- Newtown(牛顿)方法收敛速度