• 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请求头包括了若干个属性。server可据此获知client的信息,通过@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就能几乎相同能够用了。


  • 相关阅读:
    网页特殊符号HTML代码大全
    TypeScript在react项目中的实践
    koa源码阅读[3]-koa-send与它的衍生(static)
    微任务、宏任务与Event-Loop
    koa源码阅读[2]-koa-router
    koa源码阅读[1]-koa与koa-compose
    koa源码阅读[0]
    TypeScript在node项目中的实践
    我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
    Javascript装饰器的妙用
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6944219.html
Copyright © 2020-2023  润新知