IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring注解 -> 正文阅读

[Java知识库]Spring注解

Controller层常使用的注解

类位置

@Controller

@Controller定义一个Controller控制器

  • 在Spring MVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求
    • 前端调用接口请求最先到达DispatcherServlet,DispatcherServlet 根据请求路径的url找对应的Controller控制器类
    • @Controller的作用: 此时就是把这个类定义为控制器,DispatcherServlet 分发请求到这些控制器类中,找对应URL的控制器
    • 没有@Controller就不是控制器,请求就不会扫描这个类,就识别不到更不用说调用了
  • DispatcherServlet 把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model 返回给对应的View进行展示
    • DispatcherServlet (分发) => Controller(调用) => Service(业务处理层) => Model(返回数据) => Controller(return) => View (前端展示)
  • 在Spring MVC 中提供了一个非常简便的定义Controller控制器 的方法,你无需继承特定的类或实现特定的接口
  • 只需使用@Controller标记一个类是Controller,这样的Controller 就能被外界访问到。

仅仅使用@Controller是不能算一个完整的控制器类的,只能说一半一半

  • @Controller就只是一个干干净净的注解,不会出现/root/usr这样的URL
  • 完整的控制器要配合@RequestMapping("/root")这样的注解才完整,才能被请求的那个URL精确找到类所在位置
@Controller
@RequestMapping("/action")
public class ActionController {}

@RequestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

  • 前端请求URL,被哪一个@RequestMapping匹配上了
  • 这个@RequestMapping注解对应的类就会被用来处理这个请求

RequestMapping注解有六个属性[常用的只是value、method]

value: 指定请求的实际地址,默认一个可以不写value;

//设置value的值和path的值具有同等的作用
@RequestMapping("/action")
@RequestMapping(path = "/action")
@RequestMapping(value = {"/hello", "/world", "/action"})
@RequestMapping("/action/{name}")
public String hello(@PathVariable("name") String username) {
	// =>  /action/{name}配合@PathVariable使用
	//如果username改成name与参数一致,@PathVariable可以不跟("name")
}

method: 指定请求的method类型, GET、POST、PUT、DELETE等;

@RequestMapping(value="/action", method=RequestMethod.GET)
@RequestMapping(value="/action", method=RequestMethod.POST)

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

  • 只有当请求头中 Content-Type的值与指定可消费(设置)的类型中有相同的时候,请求才会被匹配。
  • 如果某个处理方法只允许接收JSON格式的请求数据,则可以通过设置consumes属性进行限定
@RequestMapping(value = "/pets", consumes="application/json")
public void addPet(@RequestBody Pet pet) {}

produces: 它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码

  • 仅当request请求头中的(Accept)类型中包含该指定类型才返回;
  • 如果你想限定方法返回值的数据类型,则可以通过produes属性进行指定;
@RequestMapping(value="/add",produces= {
"application/json;charset=utf-8"
})
@ResponseBody//表示返回的值为字符串,不经过视图解析器
public User add(User user){
	//如果不加ResponseBody只加了produces
	//就会出现错误,因为不加ResponseBody的json返回值会经过视图解析器
	//导致的结果就是:
	//它以为你返回的这个数据是一个,以这个返回值为名称的html等前端页面文件,就会加载不了
}
  • 一般来说这个属性不用

params: 请求路径中必须携带的参数有哪些,如果没有请求参数就会出错400。

  • 只有符合URL规则且有指定参数的请求才会映射到当前的方法上
@RequestMapping(value = "/demo",params = "token=123")
public String params(){
  return "params handler";
}
http://localhost:8080/demo?token=123

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

//有个方法就要用到header的一个值,就要你请求头有这个值才行
@RequestMapping(value = "/demo",headers={
"context-type=text/plain","context-type=text/html"
})
    public String header(){
        return "headers handler";
    }

细分还有@PostMapping、@GetMapping,格式差不多

@PostMapping("/wordTJBB")

@RestController

@RestController=@Controller+@ResponseBody

  • 一个可以被扫描到的控制器且返回值不会经过视图解析器的json数据

@Api

@Api使用在类上,表明是swagger资源

  • @API拥有两个属性:value、tags
  • tags–表示说明 => 用这一个就行了
  • value–也是说明,基本用tags替代
  • description–详细说明(已经弃用)
@Api(tags = {"标题名称"}, description = "说明")
public class WordPoiController{}

在这里插入图片描述

@Slf4j

@Slf4j是用作日志输出的,一般会在项目每个类的开头加入该注解

  • 如果不写下面这段代码,并且想用log
  • 就可以用@Slf4来代替;这样就省去这段很长的代码。
private final Logger logger = LoggerFactory.getLogger(当前类名.class);
@Slf4j
public class QueryBillController {
    public String getBills() {
        log.info("进入账单查询接口");
    }

方法位置

@ResponseBody

@ResponseBody是作用于返回数据的时候,不是指请求开始的时候一定要json的参数
@ResponseBody的作用其实是将java对象转为json格式的数据。

  • @responseBody注解的作用: 将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
  • 注意:在使用此注解之后不会再走视图处理器(不会去调用打开任何一个html文件),而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
  • 注意:在使用@RequestMapping后,返回值通常解析为跳转路径(打开新的html文件),但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中(返回数据,而不是返回新的页面)。
@ResponseBody
public RModel generateFile(){}

警告: 这个是@ResponseBody ,有一个相似的叫@RequestBody才是控制请求时的参数的

@ApiOperation

swagger接口文档

  • @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”)
@ApiOperation(value = "导出统计报表")
@PostMapping("/wordTJBB")
public RModel getXZQDMByName

在这里插入图片描述

@GlobalTransactional

变量位置

@Autowired

@Qualifier

@Resource

参数位置

@RequestBody

@RequestBody的作用其实是将json格式的数据转为java对象。

一个接受参数的位置只能出现一个@RequestBody,因为一个json格式可以包含无限的数据,没必要也不可以在参数中出现多个@RequestBody注解

 public RModel getFileUrl(@RequestBody String str){
 //因为只有一个@RequestBody注解,所以参数名称就很随意了
 //只要参数里有json格式的数据,而且json格式的也只会有一个
 //有多个json的你也传不过来,直接报错
 //被赋值到这个参数里
 }

在这里插入图片描述

@RequestParam

@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

注意: 请不要老想着用@RequestParam去接受json格式的数据
想用json的数据直接用@RequestBody

//如果想同时用json和普通的参数:
//URL用这样的请求格式:http://localhost:8080/test?name=123
//URL中拼接普通的参数 => 请求体中用contentType:"application/json"
//传json数据
  • 语法:
@RequestParam(
value=”参数名”,required=true/false,defaultValue=””
)
  • value:参数名
  • required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
  • defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
@RequestMapping("test")
public ModelAndView test1(@RequestParam("name")String name){}

http://localhost:8080/test?name=123
  • @RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。
    在这里插入图片描述
  • 警告: 不要拿@RequestParam注解去想着接受json的对象,他就是用来接受普通的参数的,想接受json可以使用@RequestBody注解

@PathVariable

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 12:37:37  更:2021-11-17 12:37:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:52:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码