java controller注解原理_springmvc之@Controller、@RequestMapping等注解讲解

本文详细介绍了SpringMVC中@Controller、@RequestMapping以及相关注解的使用,包括请求URL、方法、参数和请求头的映射。通过示例展示了@RequestParam、@RequestHeader、@CookieValue和@RequestBody如何绑定请求参数、头部和Cookie值,帮助理解SpringMVC控制器的注解工作原理。
摘要由CSDN通过智能技术生成

首先来看下一段代码:

@Controller

@RequestMapping("/user")

public class UsersController {

@RequestMapping(value="/findAll")

private String findAll(){

return "index";

}

}

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

@Controller:表明这个类是一个控制器类。如果用这个注解,需要在spring-mvc配置文件加上这一段,

@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"}

PS:能掌握上面几个注解,springmvc就能差不多可以用了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值