springmvc之@Controller、@RequestMapping等注解讲解「建议收藏」

springmvc之@Controller、@RequestMapping等注解讲解「建议收藏」springmvc之@Controller、@RequestMapping等注解讲解

大家好,又见面了,我是你们的朋友全栈君。

代码事例:

@Controller
@RequestMapping("/user")
public class UsersController { 
   
	@RequestMapping(value="/findAll")
	private String findAll(){ 
   
		return "index";
	}
}

下面对上面几个注解进行简单的说下用法:

@Controller

@Controller:表明这个类是一个控制器类。如果用这个注解,需要在spring-mvc配置文件加上这一段,<context:component-scan base-package=“com.ztz.springmvc.controller”/>

@RequestMapping

@RequestMapping:可以为控制器指定处理可以请求哪些URL请求,@RequestMapping可以定义在类或方法上。

类上:提供初步的请求映射信息。相对于 WEB 应用的根目录
方法上:提供进一步的细分映射信息。相对于类定义处的 URL。
若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录
DispatcherServlet 截获请求后,就通过控制器上
@RequestMapping 提供的映射信息确定请求所对应的处理方法。
@RequestMapping 除了可以使用请求 URL 映射请求外,还可以使用请求方法、请求参数及请求头映射请求。

@RequestMapping 限定请求方法、 请求参数、 请求头
@Controller
@RequestMapping("/user")
public class UsersController { 
   
	
	@RequestMapping(value="/findAll",method=RequestMethod.GET)
	private String findAll(){ 
   
		System.out.println("只接受get请求");
		return "index";
	}
}
@Controller
@RequestMapping("/user")
public class UsersController { 
   
	
	@RequestMapping(value="/findAll",method=RequestMethod.POST)
	private String findAll(){ 
   
		System.out.println("只接受post请求");
		return "index";
	}
}
@Controller
@RequestMapping("/user")
public class UsersController { 
   
	
	@RequestMapping(value="/findAll",params="name")
	private String findAll(){ 
   
		System.out.println("只接受name参数");
		return "index";
	}
}

如果一个请求URL,没有携带name参数,那么该方法就拒绝呗访问。

@Controller
@RequestMapping("/user")
public class UsersController { 
   
	
	@RequestMapping(value="/findAll",headers="Content-Type:text/html;charset=UTF-8")
	private String findAll(){ 
   
		System.out.println("只接受请求头中Content-Type为text/html;charset=UTF-8的请求");
		return "index";
	}
}

@RequestParam 绑定请求参数
在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
value:参数名
required: 是否必须。 默认为 true, 表示请求参数中必须包含对应的参数, 若不存在,将抛出异常

@Controller
@RequestMapping("/user")
public class UsersController { 
   
	
	@RequestMapping(value="/findAll")
	private String findAll(@RequestParam(value="name",required=true)String name,//参数name不能为空
						   @RequestParam(value="sex",required=false)String sex,//参数sex可以为空
						   @RequestParam(value="age",defaultValue="20")String age){ 
   //参数age如果为空,默认值为20
		System.out.println(name);
		System.out.println(sex);
		System.out.println(age);
		return "index";
	}
}

浏览器请求:http://127.0.0.1:8080/springmvc/user/findAll?name=123
控制台输出:
123
null
20

@RequestHeader 获取请求头
一个Http请求头包含了若干个属性,服务器可据此获知客户端的信息,通过@RequestHeader即可将求头中的属性值绑定到处理方法的入参中。

@Controller
@RequestMapping("/user")
public class UsersController { 
   
	
	@RequestMapping(value="/findAll")
	private String findAll(@RequestHeader(value="User-Agent")String user_Agent,
						   @RequestHeader(value="Cookie")String cookie){ 
   
		System.out.println(user_Agent);
		System.out.println(cookie);
		return "index";
	}
}

浏览器请求:http://127.0.0.1:8080/springmvc/user/findAll
控制台输出:
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
JSESSIONID=0E665D80D25F097EB9ECA533F07C3355

@CookieValue 获取cookie值

上面我们获得http请求头的cookie,现在我们直接去获得cookie的值。

@Controller
@RequestMapping("/user")
public class UsersController { 
   
	
	@RequestMapping(value="/findAll")
	private String findAll(@CookieValue(value="JSESSIONID")String cookie){ 
   
		System.out.println(cookie);
		return "index";
	}
}

浏览器请求:http://127.0.0.1:8080/springmvc/user/findAll
控制台输出:
0E665D80D25F097EB9ECA533F07C3355

@RequestBody获取http的body
@Controller
@RequestMapping("/user")
public class UsersController { 
   
	
	@RequestMapping(value="/findAll",method=RequestMethod.POST)
	private String findAll(@RequestBody(required=true) String body){ 
   
		System.out.println(body);
		return "index";
	}
}

这里采用Fiddler测试下,POST请求http://127.0.0.1:8080/springmvc/user/findAll,消息体是:{“name”:“test @RequestBody”}
控制台输出:
{“name”:“test @RequestBody”}

作者:java小酱油啊
来源:CSDN
原文:https://blog.csdn.net/luckey_zh/article/details/46850155

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105830.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • GPU视频编解码「建议收藏」

    GPU视频编解码「建议收藏」一视频编解码基础1.1识别编码流程视频编解码流程1.2YUV颜色空间YCbCr通常是YUV的同义词,Y为明度(luma),CbCr为色度(chroma),Cb为蓝色分量,Cr为红色分量。颜色空间转换公式:–      RGB转YUV•      y=[0.299,0.587,0.114]*[r,g,b]’•      u=[-0.147,-0.28…

    2022年7月13日
    29
  • Linux查看CUDA版本以及cudnn版本号[通俗易懂]

    Linux查看CUDA版本以及cudnn版本号[通俗易懂]文章目录1.查看CUDA版本2.查看cudnn版本1.查看CUDA版本方法1:查看文件cat/usr/local/cuda/version.txt方法2:命令nvcc–version2.查看cudnn版本cat/usr/local/cuda/include/cudnn.h|grepCUDNN_MAJOR-A2输出如下:(图中版本…

    2022年5月6日
    76
  • Android studio 一个项目引入另一个项目作为Libary「建议收藏」

    Android studio 一个项目引入另一个项目作为Libary「建议收藏」1.在我们开发Android项目时,有时需要一个项目作为另一个项目的工具类的引用,这样就需要配置下,使得MyLibrary到MyApplication作为一个module。我们直接截图上步骤:1.

    2022年8月5日
    11
  • 51单片机LCD1602程序详解[通俗易懂]

    51单片机LCD1602程序详解[通俗易懂]LCD1602工业字符型液晶。1602是指LCD显示的内容为16X2,即可以显示两行,每行16个字符.特殊接口说明RS:寄存器选择输入端RS=1:指向数据寄存器RS=0:指向指令寄存器RW:读写控制输入端RW=0:写操作RW=1:读操作E:使能信号输入端读操作时,高电平有效;写操作时,下降沿有效;程序编写:#include#inc

    2022年7月16日
    16
  • 【嵌入式】基于ARM的嵌入式Linux开发总结

    【嵌入式】基于ARM的嵌入式Linux开发总结前言嵌入式知识点复习一嵌入式知识点复习二–体系结构嵌入式知识点复习三–ARM-LINUX嵌入式开发环境嵌入式知识点复习四–arm-linux文件编程嵌入式知识点复习五–arm-linux进程编程嵌入式知识点复习六–arm-linux网络编程嵌入式知识点复习七–linux字符型设备驱动初步嵌入式知识点复习一1、嵌入式系统的一般组成结构2、嵌入式硬件系统的结构(1)…

    2022年6月10日
    37
  • 操作系统中进程调度算法详解及例题解释「建议收藏」

    操作系统中进程调度算法详解及例题解释「建议收藏」文章目录1.先来先服务(FCFS,firstcomefirstserve)1.1算法思想1.2算法规则1.3用于作业/进程调度1.4是否可抢占1.5优缺点1.6是否会导致饥饿2.短作业优先(SJF,shortestjobfirst)2.1算法思想2.2算法规则2.3用于作业/进程调度2.4是否可抢占2.5优缺点2.6是否会导致饥饿3.高响应比优先(HRRN)…

    2022年9月29日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号