SpringMVC的各种注解

@RequestMapping

Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL ,·请求在控制器的类定义及方法定义处都可标注

类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录

方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录

@RequestMapping还可以根据 请求方法 头 参数 来映射

@RequestMapping 的 value、method、params 及 heads分别表示请求 URL、请求方法、请求参数及请求头的映射条 件,他们之间是与的关系,联合使用多个条件可让请求映射 更加精确化。

    /**
     * 常用: 使用 method 属性来指定请求方式
     */
    @RequestMapping(value = "/testMethod", method = RequestMethod.POST)
    public String testMethod() {
        System.out.println("testMethod");
        return SUCCESS;
    }

上面必须接受post请求 其他的是无法应答的!

<form action="springmvc/testMethod" method="POST">
        <input type="submit" value="submit"/>
    </form>

请求头和参数的简单表达式:

/**
     * 了解: 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式.
     *
     * @return
     */
    @RequestMapping(value = "testParamsAndHeaders", params = { "username",
            "age!=10" }, headers = { "Accept-Language=en-US,zh;q=0.8" })
    public String testParamsAndHeaders() {
        System.out.println("testParamsAndHeaders");
        return SUCCESS;
    }

@PathVariable:

/**
     * @PathVariable 可以来映射 URL 中的占位符到目标方法的参数中.
     * @param id
     * @return
     */
    @RequestMapping("/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") Integer id) {
        System.out.println("testPathVariable: " + id);
        return SUCCESS;
    }

关于REST:

REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用

资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。 可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。要获取这个资源,访问它的URI就可以,因此 URI 即为每一个资源的独一无二的识别符。

表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层(Representation)。比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。

状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器 端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“

状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “ 表现层状态转化”。具体说,就是 HTTP 协议里面,四个表示操作方式的动 词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET 用来获 取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。

/order/1 HTTP GET :得到 id = 1 的 order

/order/1 HTTP DELETE:删除 id = 1的 order

/order/1 HTTP PUT:更新id = 1的 order

/order HTTP POST:新增 order

HiddenHttpMethodFilter:浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换 为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求。

配置: 过滤所有请求

<!--
    配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 POST 请求
    -->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

jsp:

<form action="springmvc/testRest/1" method="post">
        <input type="hidden" name="_method" value="PUT"/>
        <input type="submit" value="TestRest PUT"/>
    </form>
    <br><br>

    <form action="springmvc/testRest/1" method="post">
        <input type="hidden" name="_method" value="DELETE"/>
        <input type="submit" value="TestRest DELETE"/>
    </form>
    <br><br>

    <form action="springmvc/testRest" method="post">
        <input type="submit" value="TestRest POST"/>
    </form>
    <br><br>

    <a href="springmvc/testRest/1">Test Rest Get</a>
    <br><br>

controller:

    /**
     * Rest 风格的 URL. 以 CRUD 为例:
     * 新增: /order POST
     * 修改: /order/1 PUT       之前   update?id=1
     *  获取:/order/1 GET       之前    get?id=1
     *  删除: /order/1 DELETE   之前    delete?id=1
     *
     * 如何发送 PUT 请求和 DELETE 请求呢 ?
     * 1. 需要配置 HiddenHttpMethodFilter
     *  2. 需要发送 POST 请求
     * 3. 需要在发送 POST 请求时携带一个 name="_method" 的隐藏域, 值为 DELETE 或 PUT
     *
     * 在 SpringMVC 的目标方法中如何得到 id 呢? 使用 @PathVariable 注解
     *
     */
    @RequestMapping(value = "/testRest/{id}", method = RequestMethod.PUT)
    public String testRestPut(@PathVariable Integer id) {
        System.out.println("testRest Put: " + id);
        return SUCCESS;
    }

    @RequestMapping(value = "/testRest/{id}", method = RequestMethod.DELETE)
    public String testRestDelete(@PathVariable Integer id) {
        System.out.println("testRest Delete: " + id);
        return SUCCESS;
    }

    @RequestMapping(value = "/testRest", method = RequestMethod.POST)
    public String testRest() {
        System.out.println("testRest POST");
        return SUCCESS;
    }

    @RequestMapping(value = "/testRest/{id}", method = RequestMethod.GET)
    public String testRest(@PathVariable Integer id) {
        System.out.println("testRest GET: " + id);
        return SUCCESS;
    }

@RequestParam 绑定请求参数值

jsp:

<a href="springmvc/testRequestParam?username=atguigu&age=11">Test RequestParam</a>

参数如何传到目标方法中

/**
     * @RequestParam 来映射请求参数:
     *               value 值即请求参数的参数名
     *               required 该参数是否必须. 默认为 true 如果必须 但是没有传递 会false
     *               defaultValue 请求参数的默认值
     */
    @RequestMapping(value = "/testRequestParam")
    public String testRequestParam(
            @RequestParam(value = "username") String un,
            @RequestParam(value = "age", required = false, defaultValue = "0") int age) //不是必须的 默认是0
       {
        System.out.println("testRequestParam, username: " + un + ", age: "
                + age);
        return SUCCESS;
    }

@RequestHeader 绑定请求报头的属性值

    /**
     * 了解: 映射请求头信息    用法同 @RequestParam
     */
    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(
            @RequestHeader(value = "Accept-Language") String al) {
        System.out.println("testRequestHeader, Accept-Language: " + al);
        return SUCCESS;
    }

jsp:

<a href="springmvc/testRequestHeader">Test RequestHeader</a>

@CookieValue 绑定请求中的 Cookie 值

    /**
     * 了解:
     *
     * @CookieValue: 映射一个 Cookie 值. 属性同 @RequestParam
     * @CookieValue("JSESSIONID")  写的是cookie的名字
     */
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
        System.out.println("testCookieValue: sessionId: " + sessionId);
        return SUCCESS;
    }

POJO 对象绑定请求参数值

jsp:

<form action="springmvc/testPojo" method="post">
        username: <input type="text" name="username"/>
        <br>
        password: <input type="password" name="password"/>
        <br>
        email: <input type="text" name="email"/>
        <br>
        age: <input type="text" name="age"/>
        <br>
        city: <input type="text" name="address.city"/>
        <br>
        province: <input type="text" name="address.province"/>
        <br>
        <input type="submit" value="Submit"/>
    </form>

实体类:

package com.atguigu.springmvc.entities;

public class User {

    private Integer id;

    private String username;
    private String password;

    private String email;
    private int age;

    private Address address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

//    @Override
//    public String toString() {
//        return "User [username=" + username + ", password=" + password
//                + ", email=" + email + ", age=" + age + ", address=" + address
//                + "]";
//    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password="
                + password + ", email=" + email + ", age=" + age + "]";
    }

    public User(String username, String password, String email, int age) {
        super();
        this.username = username;
        this.password = password;
        this.email = email;
        this.age = age;
    }

    public User(Integer id, String username, String password, String email,
            int age) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
        this.age = age;
    }

    public User() {}
}

支持级联属性所以:

package com.atguigu.springmvc.entities;

public class Address {

    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address [province=" + province + ", city=" + city + "]";
    }

}

controller:

/**
     * Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配, 自动为该对象填充属性值。支持级联属性。
     * 如:dept.deptId、dept.address.tel 等
     */
    @RequestMapping("/testPojo")
    public String testPojo(User user) {
        System.out.println("testPojo: " + user);
        return SUCCESS;
    }

使用 Servlet API 作为入参

MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数?

jsp:

<a href="springmvc/testServletAPI">Test ServletAPI</a>

controller:

/**
     * 可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型:
     *
     * HttpServletRequest
     * HttpServletResponse
     * HttpSession
     * java.security.Principal
     * Locale InputStream
     * OutputStream
     * Reader
     * Writer
     * @throws IOException
     */
    @RequestMapping("/testServletAPI")
    public void testServletAPI(HttpServletRequest request,
            HttpServletResponse response, Writer out) throws IOException {
        System.out.println("testServletAPI, " + request + ", " + response);
        out.write("hello springmvc");
//        return SUCCESS;
    }

原文地址:https://www.cnblogs.com/toov5/p/10035912.html

时间: 11-29

SpringMVC的各种注解的相关文章

SpringMVC轻松学习-注解的使用(三)

根据上一讲的例子,我们下面就注解的使用进行详细说明. 我们采用sprng MVC开发项目时,通常都会采用注解的方式,这样可以大大提高我们的开发效率.实现零配置.下面我们从零开始重新做一个spring MVC的配置.这个项目完全采用注解的方式开发.同时,我们以后的spring MVC项目也都会采用注解的方式. 修改web.xml,文件内容如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <?xml version=

SpringMVC自动扫描@Controller注解的bean

若要对@Controller注解标注的bean进行自动扫描,必须将<context:component-scan base-package="包路径.controller"/>放置在dispatcherservlet的配置文件中,若配置在ContextLoaderListener的配置文件applicationContext.xml中则不起作用 <!-- 上下文配置文件 --> <context-param> <param-name>co

安全框架 - Shiro与springMVC整合的注解以及JSP标签

Shiro想必大家都知道了,之前的文章我也有提过,是目前使用率要比spring security都要多的一个权限框架,本身spring自己都在用shiro,之前的文章有兴趣可以去扒一下 最近正好用到shiro,简单聊聊几个小tips吧 <!-- 对静态资源设置匿名访问,即可以未登录状态下访问 --> /images/** = anon /js/** = anon /styles/** = anon /css/** = anon /page/getOrders.action = perms[or

springmvc之自定义注解(annotation)

参考:日志处理 三:Filter+自定义注解实现 系统日志跟踪功能 1.项目结构 2.pom.xml,添加需要依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mav

springMVC使用@InitBinder注解把字符串转化为Date类型

在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支持这个格式的转换,所以必须要手动配置, 自定义数据类型的绑定才能实现这个功能. 比较简单的可以直接应用springMVC的注解@initbinder和spring自带的WebDataBinder类和操作 @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat =

springmvc系列03 注解开发

1.web.xml 不变 2.springmvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://ww

springMVC [email&#160;protected]注解(后台控制器获取参数)

在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取. 1.获取提交的参数: @RequestMapping("testRequestParam") public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) { System.out.pri

spring+springmvc+ibatis整合注解方式实例

需求说明 实现用户通过数据库验证登录需求,采用 Myeclipse+Tomcat 6.0+Mysql 5.0+JDK 1.6 2.数据库表 开发所用是Mysql数据库,只建立单张用户表T_USER,表结构如下: 字段名称 数据类型 字段描述 ID int 用户编号 USERNAME VARCHAR 用户名 PASSWORD VARCHAR 用户登录密码 sql语句如下: CREATE TABLE `t_user` ( `ID` int(11) NOT NULL auto_increment, `

springMVC入门程序-注解开发环境配置

在进行springMVC开发时,我们也希望通过注解进行开发,这样比较快捷方便.现将springMVC开发步骤记录如下: 1.新建web程序,导入springMVC需要的jar包: 2.配置web.xml文件.主要是进行servlet的配置. 1 <servlet> 2 <servlet-name>springmvc</servlet-name> 3 <servlet-class>org.springframework.web.servlet.Dispatch

SpringMVC的@InitBinder注解使用

@InitBinder用于在@Controller中标注于方法,表示为当前控制器注册一个属性编辑器或者其他,只对当前的Controller有效.在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换,而SpringMVC默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题.在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作. WebDat