@RequestMapping与@RequestParam注解

@RequestMapping注解

@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。 该注解不仅可以用于方法上,还可以用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径,例如可以加个虚拟目录什么的。

代码示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class Test {

    @RequestMapping("/test.do")
    public void method(){
        System.out.println("This is a test output");
    }
}

此时,需要访问到该控制器中的method方法的话,就需要加上 /test 这个虚拟目录,例如:

http://localhost:8090/test/test.do

接下来简单介绍@RequestMapping注解中的属性:

1.value与path属性,这两个属性是一样的,用于指定HTTP请求资源(URI)的实际映射地址,当不指定具体的属性值时,默认是给该属性传递值,示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class Test {

    @RequestMapping(value = "/value.do")
    public void value(){
        System.out.println("value");
    }

    @RequestMapping(path = "/path.do")
    public void path(){
        System.out.println("path");
    }

    @RequestMapping("/method.do")
    public void method(){
        System.out.println("method");
    }
}

此时,可以访问以下几个地址:

http://localhost:8090/test/value.do
http://localhost:8090/test/path.do
http://localhost:8090/test/method.do

这两个属性都可以配置多个URI地址,示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class Test {

    @RequestMapping(value = {"","/view.do","index*","/**/jsp.do","/value.do"})
    public void value(){
        System.out.println("value");
    }
}

2.consumes属性,这个属性指定处理何种请求的提交内容类型(Content-Type),例如application/json, text/html;等,示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class Test {

    // 只处理Content-Type的值为application/json的请求
    @RequestMapping(value = "json.do", consumes = "application/json")
    public void json(){
        System.out.println("application/json");
    }

    // 只处理Content-Type的值为text/html的请求
    @RequestMapping(path = "/xml.do", consumes = "text/html")
    public void xml() {
        System.out.println("text/html");
    }
}

我们可以通过Postman来进行测试:

控制台打印结果:

application/json
text/html

3.produces属性,该属性用于指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回,示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class Test {

    // 该方法仅处理request请求中Accept头中包含了"application/json"的请求,同时暗示了返回的内容类型为application/json;
    @RequestMapping(value = "json.do", produces = "application/json")
    public void json(){
        System.out.println("application/json");
    }

    // 该方法仅处理request请求中Accept头中包含了"text/xml"的请求,同时暗示了返回的内容类型为text/xml;
    @RequestMapping(path = "/xml.do", produces = "text/html")
    public void xml() {
        System.out.println("text/html");
    }
}

同样可以使用Postman进行测试:

控制台打印结果:

application/json
text/html

4.method属性,从名称就可以看出这个属性用于指定请求的method类型, 例如GET、POST、PUT、DELETE等,示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/test")
public class Test {

    @RequestMapping(value = "get.do", method = RequestMethod.GET)
    public void get() {
        System.out.println("get");
    }

    @RequestMapping(value = "post.do", method = RequestMethod.POST)
    public void post() {
        System.out.println("post");
    }

    @RequestMapping(value = "delete.do", method = RequestMethod.DELETE)
    public void delete() {
        System.out.println("delete");
    }

    @RequestMapping(value = "put.do", method = RequestMethod.PUT)
    public void put() {
        System.out.println("put");
    }

    @RequestMapping(value = "patch.do", method = RequestMethod.PATCH)
    public void patch() {
        System.out.println("patch");
    }
}

5.params属性,该属性用于指定request里某些参数为某个特定的值时,才让该方法处理,示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class Test {

    // 当user参数为test时执行这个方法
    @RequestMapping(value = "test.do", params = "user=test")
    public void user(String user) {
        System.out.println(user);
    }

    // 当user参数为test以及alias参数为test时执行这个方法
    @RequestMapping(value = "test.do", params = {"user=test","alias=test"})
    public void userAndAlias(String user, String alias) {
        System.out.println(user);
        System.out.println(alias);
    }
}

注:在SpringMVC中,会自动将request中的参数传递到对应的方法参数上。

6.headers属性,该属性指定request中必须包含某些指定的header值,才能让该方法处理请求,示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class Test {

    @RequestMapping(value = "test.do", headers = "Referer=http://www.xxx.com/")
    public void test() {
        System.out.println("test");
    }
}

@RequestParam注解

@RequestParam注解比较简单,它用于将请求参数区数据映射到功能处理方法的参数上,自SpringMVC4.2之后,@RequestParam注解内部有4个参数:

  • String name
  • String value
  • boolean required
  • String defaultValue

1.name与value属性,其中name和value分别是URL参数的名称,即二者没区别,我个人比较喜欢用name,因为在HTML的表单中我们都是用name属性来设置URL参数名称的,所以在注解上也使用name这个属性的话,会更直观一些。示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/test")
public class Test {

    @RequestMapping("test.do")
    // 指定将username参数的值传递到该方法的name参数上
    public void test(@RequestParam(name = "username") String name) {
        System.out.println(name);
    }

    @RequestMapping("user.do")
    // 指定将username参数的值传递到该方法的user参数上,alias参数的值则传递到该方法的a参数上
    public void userAndAlias(@RequestParam(name = "username")String user, @RequestParam(name = "alias")String a) {
        System.out.println(user);
        System.out.println(a);
    }
}

2.required属性,该属性用于指定某个参数是否是必须的,默认值为true,表示请求中一定要有相应的参数,否则将报404错误码,示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/test")
public class Test {

    @RequestMapping("test.do")
    // 指定username参数是必须的,如果url上没有的话就会报错
    public void test(@RequestParam(name = "username", required = true) String name) {
        System.out.println(name);
    }

    @RequestMapping("user.do")
    // 指定username与alias参数不是必须的,即便url上没有也不会报错
    public void userAndAlias(@RequestParam(name = "username", required = false) String user, @RequestParam(name = "alias", required = false) String a) {
        System.out.println(user);
        System.out.println(a);
    }
}

3.defaultValue属性,该属性用于指定参数的默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties[‘java.vm.version‘]}”。示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/test")
public class Test {

    @RequestMapping("test.do")
    // url上没有username参数时,给它设置一个默认值为nothing
    public void test(@RequestParam(name = "username", defaultValue = "nothing") String name) {
        System.out.println(name);
    }

    @RequestMapping("user.do")
    // url上没有username以及alias参数时,给它设置一个默认值为nothing
    public void userAndAlias(@RequestParam(name = "username", defaultValue = "nothing") String user, @RequestParam(name = "alias", defaultValue = "nothing") String a) {
        System.out.println(user);
        System.out.println(a);
    }
}

原文地址:http://blog.51cto.com/zero01/2085805

时间: 2024-11-13 12:01:58

@RequestMapping与@RequestParam注解的相关文章

@Controller和@RequestMapping和@RequestParam注解理解和区别

  在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以

springMVC笔记系列(8)——RequestParam注解

前面的文章介绍过注解@PathVariable,它能够为Rest风格的URL用占位符的方式传递一个参数,但是这个参数并不是真正意义上的请求参数.请求参数怎么处理是本文的主要内容. Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应人参中. Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名. 必要时可以对方法及方法入参标注相应的注解(@PathVariable. @RequestParam. @RequestH

@RequestParam注解一般用法

原文链接:https://www.cnblogs.com/likaileek/p/7218252.html 在此之前,写项目一直用的是@RequestParam(value="aa" required=false)这个注解,但是并不知道它的意思.现在懂了,特来记录下. 1.可以对传入参数指定参数名 1 @RequestParam String inputStr 2 // 下面的对传入参数指定为aa,如果前端不传aa参数名,会报错 3 @RequestParam(value="

[email protected]注解与RequestParam注解

@Scope注解,设置为多例,Scope只能修饰类,如果设置为单例,只能等张三用完,李四才能用,多例的话张三创建一个,李四创建一个,互不干扰 package cn.java.controller.front; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annota

@PathVariable注解和@RequestParam注解的区别

@PathVariable注解和@RequestParam注解的区别.@RequestParam注解是获取静态URL传入的参数@PathVariable是获取请求路径中的变量作为参数/需要和@RequestMapping("item/{itemId}")配合使用@Param注解和@RequestParam注解的区别.@Parm 指定request中必须包含某些参数值是,才让该方法处理. 注意@RequestMapping(value="test",params={&

@RequestMapping,@RequsetBody等注解说明

@RequestMapping,@RequestBody的注解的使用 当下的主流web开发框架当属springMVC,究其原因就是SpringMVC可以很容易的将后台的数据转化为各种类型的数据,,很好的适应了移动互联网的数据多样化变化的要求.比如可以很容易的将数据转化 为我们常使用的json数据集,也可以转化为Excel,PDF,XML等的数据集.随着springboot的发展,注解开发因为其开发速度快,编译期间容易发现错误的出处,注解开发已经成为趋势.这篇博文就基于srpingboot下的 s

springMVC中@RequestParam注解的用法

springMVC中@RequestParam注解用在Controller层获解析.提取参数,当然你也可以用request.getParameter("name")来获取参数,而@RequestParam注解接收参数有几种不同的写法. 1.test(String name) 像正常的方法接收参数,不带@RequestParam注解.这种写法,如果没有name参数不会报错. 2.test(@RequestParam String name) 带@RequestParam注解.这种写法,n

@RequestParam注解

@RequestParam注解支持的属性 属性 类型 是否必要 说明 name String 否 指定请求头绑定的名称 value String 否 name属性的别名 required boolean 否 指示参数是否必须绑定,默认为ture defaultValue String 否 如果没有传递参数而使用的默认值 示例代码如下: public String register( @RequestParam("loginname") String loginname, @Reques

四、Spring MVC的RequestParam注解

前面的章节,有提到可以通过@PathVariable注解来映射restful风格的url中的值到方法中去,本章就看看如果不使用restful风格的url来怎么进行参数的传递. RequestParam就是来实现参数传递的,能够把用户的输入绑定到后台的方法上面.它有三个主要的属性: value:定义参数的名称 required:定义参数是否是必须的,默认是true defaultValue:定义参数的默认值 下面结合具体的示例代码来看一下如何使用: 1.下面的这段代码定义了三个参数,一个name,