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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 钽电容规格定义_钽电容规格与封装尺寸

    钽电容规格定义_钽电容规格与封装尺寸

    2025年5月24日
    1
  • python中yield的用法详解——最简单,最清晰的解释

    python中yield的用法详解——最简单,最清晰的解释首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂的,我就想问没有有考虑过读者的感受。接下来是正题:首先,如果你还没有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它首先是个return,普通的retur…

    2022年7月23日
    8
  • python 文档注释快捷键,python注释快捷键是什么「建议收藏」

    python 文档注释快捷键,python注释快捷键是什么「建议收藏」python注释快捷键:1、单行注释是【#】,Mac的快捷键是【command+/】,windows的快捷键是【Ctrl+/】;2、多行注释是三个单引号【”’注释”’】。g1m少儿编程网-https://www.pxcodes.comg1m少儿编程网-https://www.pxcodes.com本教程操作环境:windows7系统、python3.9版,DELLG3电脑。g1m少儿编程…

    2022年5月12日
    56
  • pytest的使用_调用方法的具体调用格式为

    pytest的使用_调用方法的具体调用格式为Pytest执行用例规则Pytest在命令行中支持多种方式来运行和选择测试用例1.对某个目录下所有的用例pytest2.对模块中进行测试pytesttest_mod.py3.对文件夹进行

    2022年7月31日
    2
  • 通读音_Android API

    通读音_Android API所谓工欲善其事,必先利其器,所以通读了cheerio的API,顺便翻译了一遍,有些地方因为知道的比较少,不知道什么意思,保留了英文,希望各位不吝告诉我,然后一起把这个翻译完成。###cheerio为服务器特别定制的,快速、灵活、实施的jQuery核心实现.###Introduction将HTML告诉你的服务器varcheerio=require(‘cheerio’),$

    2025年6月21日
    0
  • 双绞线制作实验报告心得体会_制作网络双绞线实验心得

    双绞线制作实验报告心得体会_制作网络双绞线实验心得参考各路资料。不一一指出。一、实验目的:(1)学会两种双绞线制作方法;(2)掌握剥线/压线钳和普通网线测试仪的使用方法;(3)了解双绞线和水晶头的组成结构;(4)了解各网络设备之间网线连接的特点。二、实验项目:(1)直通线的制作(2)交叉线制作三、实验准备1、相关知识的准备(1)RJ-45水晶头结构(2)做线工具 剥线/压线钳

    2022年10月24日
    0

发表回复

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

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