SpringMVC中接收参数总结

一、引子

最近在写项目时,时不时会忘记或者漏写对应的参数注解,所以决定简单整理一下相关注解。

二、注解解析

@RequestParam

一、要求形参名=请求参数名,或者是请求实体类时(已有实体类),可以不需要加该注解

java 复制代码
package com.atguigu.param;

import com.atguigu.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("param")
public class ParamController {

    @RequestMapping("data")
    @ResponseBody
    //直接接收
    //要求请求参数名=形参名
    public String data(String name,int age){

        System.out.println("name = " + name + ", age = " + age);
        return "name = " + name + ", age = " + age;

    }

    @GetMapping("data3")
    @ResponseBody
    //使用实体对象接值
    public String data3(User user){
        System.out.println("user = " + user);
        return "user = " + user;
    }

}

二、请求参数名!=参数名时,需要写该注解@RequestParam,其中

value="指定请求参数名"

required=false,前端是否必须传递此参数,默认是必须,不传报错400

default="1",当非必须传递false,可以设默认值

java 复制代码
package com.atguigu.param;

import com.atguigu.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("param")
public class ParamController {

    @GetMapping("data1")
    @ResponseBody
    //注解指定
    public String data1(@RequestParam(value = "account") String username,
                        @RequestParam(required = false,defaultValue = "1") int page){
        System.out.println("username = " + username + ", page = " + page);
        return "username = " + username + ", page = " + page;
    }


}

三、一名多值的情况使用list时,需要用到该注解@RequestParam,将集合add加入对应数据类型

如果不加该注解,将会让hbs对应的一个字符串直接赋值给集合。

java 复制代码
package com.atguigu.param;

import com.atguigu.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("param")
public class ParamController {

    @GetMapping("data2")
    @ResponseBody
    //特殊值一名多值
    public String data2(@RequestParam List<String> hbs){
        System.out.println("hbs = " + hbs);
        return "hbs = " + hbs;
    }

}

@PathVariable

路径传参时,必须用到@PathVariable

java 复制代码
package com.atguigu.path;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("path")
@ResponseBody
public class PathController {
    @GetMapping("{account}/{password}")
    public String login(@PathVariable String account,@PathVariable String password){

        System.out.println("account = " + account + ", password = " + password);
        return "account = " + account + ", password = " + password;

    }

}

@RequestBody

前端传入json数据时需要用到@RequestBody,如@PostMapping,@DeleteMapping,@PutMapping中有时会用到

java 复制代码
package com.atguigu.json;

import com.atguigu.pojo.Person;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("json")
@ResponseBody
public class JsonController {

    @PostMapping("data")
    public String data(@RequestBody Person person){

        System.out.println("person = " + person);
        return "person = " + person;

    }

}

@RequestHeader

用于接收请求头

java 复制代码
package com.atguigu.header;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("header")
@ResponseBody
public class HeaderController {

    @RequestMapping ("data")
    public String data(@RequestHeader String host){
        System.out.println("host = " + host);
        return "host = " + host;
    }

}
相关推荐
码士集团小青7 小时前
SpringBoot 集成缓存性能之王 Caffeine
spring boot·后端·缓存
凤凰院凶涛QAQ8 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
H.莓飛8 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构
wangchunyu1149 小时前
JAVA AQS与Lock实现原理(含CAS)
java·开发语言·word
w_zero_one10 小时前
算法--模拟
java·数据结构·算法
Javatutouhouduan10 小时前
阿里1658页Java面试题总结(含答案)
java·高并发·java面试·java面试题·后端开发·java程序员·java八股文
秋天的怀念_David10 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
专业程序开发源11 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
秋天的怀念_David11 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
thefool11226611 小时前
网络编程^
java