SpringMVC请求参数处理

SpringMVC请求参数处理

背景

我们在执行业务的过程中通常会将一些请求参数传递到服务端,服务端如何获取参数并注入给我们的方法参数的呢?

准备工作

Spring Web 依赖(提供了spring mvc支持并且会嵌入一个tomcat)

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Thymeleaf 依赖(提供了以html作为页面模板进行解析和操作的相关对象)

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

定义一个controller对象,用户处理客户端请求,例如:

@RestController
public class ParamObjectController {}

GET请求:

直接量方式

在ParamObjectController中添加方法,基于直接量方式接受客户端请求参数,例如:

@GetMapping("/doParam01")
public String doMethodParam(String name){
 return "request params "+name;
}

访问时,可以这样传参,例如:

http://localhost:8080/doParam01?name=zhengzhou

POJO(实体类)对象方式

定义pojo对象,用于接受客户端请求参数,例如:

package com.cy.pj.module.pojo;
public class RequestParameter {
    private String name;
    //......
 public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
 public String toString() {
        return "RequestParam{" +
                "name='" + name + ''' +
                '}';
    }
}

定义Controller方法,方法中使用pojo对象接收方法参数,例如:

@RequestMapping("/doParam02")
public String doMethodParam(RequestParameter param){//pojo对象接收请求参数,pojo对象中需提供与参数名相匹配的set方法
 return "request params "+param.toString();
}

启动服务进行访问测试,可以这样传参,例如:

http://localhost:8080/doParam02?name=henan

Map对象方式

定义Controller方法,基于map对象接收请求参数,例如:

@GetMapping("/doParam03")
public String doMethodParam(@RequestParam Map<String,Object> param){
 return "request params "+param.toString();
}

启动服务进行访问测试,可以这样传参,例如:

http://localhost:8080/doParam03?name=beijing

POST请求:(项目中用的比较多)

直接量方式

post的请求参数中都要加上@RequestBody注解,原因:post请求是客户端向服务端发来的json型的数据。

@PostMapping("/doParam04")
public String doMethodParam(@RequestBody String name){
 return "post请求方式测试: "+name;
}

访问时用Postman提交Json型数据

http://localhost:8080/doParam04

在这里插入图片描述

POJO对象方式

@PostMapping("/doParam01")
public String doPostParam(@RequestBody RequestParameter req){
 return "post params "+req;
}
http://localhost:8080/doParam01

Map集合

–1,概述

	是接口,和Collection没有继承实现的关系。
	数据是一对儿一对儿出现的。必须同时指定这组数据的K,V
	K是键,V是值。其中,K不能重复.V可以重复
	K--key ,V--value
	也可以用泛型约束K的类型和V的类型

–2,常用方法

	void clear() 
      从此映射中移除所有映射关系(可选操作)。 
	 boolean containsKey(Object key) 
	          如果此映射包含指定键的映射关系,则返回 true。 
	 boolean containsValue(Object value) 
	          如果此映射将一个或多个键映射到指定值,则返回 true。 
	 Set<Map.Entry<K,V>> entrySet() 
	          返回此映射中包含的映射关系的 Set 视图。 
	 boolean equals(Object o) 
	          比较指定的对象与此映射是否相等。 
	 V get(Object key) 
	          返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。 
	 int hashCode() 
	          返回此映射的哈希码值。 
	 boolean isEmpty() 
	          如果此映射未包含键-值映射关系,则返回 true。 
	 Set<K> keySet() 
	          返回此映射中包含的键的 Set 视图。 
	 V put(K key, V value) 
	          将指定的值与此映射中的指定键关联(可选操作)。 
	 void putAll(Map<? extends K,? extends V> m) 
	          从指定映射中将所有映射关系复制到此映射中(可选操作)。 
	 V remove(Object key) 
	          如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。 
	 int size() 
	          返回此映射中的键-值映射关系数。 
	 Collection<V> values() 
	          返回此映射中包含的值的 Collection 视图。 

测试

//测试 HashMap实现类
		public class Test5 {
		    public static void main(String[] args) {
		        //1,创建HashMap对象
		//      HashMap<key的类型,value的类型> map = new HashMap();
		        HashMap<Integer,String> map = new HashMap<>();
		        //2,调用方法
		        map.put(9527,"吴彦祖");//把一组映射关系的数据存入map
		        map.put(9528,"郭富城");
		        map.put(9525,"霍建华");
		        map.put(9520,"陈冠希");
		        map.put(9520,"李家兴");
		        //特点:数组无序 + key不能相同,相同时value被覆盖		   
		        System.out.println(map);
		        System.out.println( map.containsKey(9520) );//判断是否包含9520的key
		        System.out.println( map.containsValue("陈冠希") );//判断是否包含"唐伯虎"的value
		        System.out.println( map.equals("陈冠希") );//判断是否相等
		//        map.clear();//清空集合
		        System.out.println(map.get(9525));//根据key获取value
		        System.out.println(map.hashCode());//获取哈希码值
		        System.out.println(map.isEmpty());//判断是否为空
		        System.out.println(map.size());//获取map的长度
		        System.out.println(map.remove(9528));//根据key删除记录
		        //迭代遍历
		        //方式1::Set<K> keySet()--把所有key获取到并存入set
		        Set<Integer> keys = map.keySet();//把所有key存入到set里
		        for (Integer k: keys) {//迭代set,得到每个key
		            //拿着key查对应的vlaue
		            String v = map.get(k);		          
		            System.out.println(k+",,,"+v);
		        }
		        //方式2::Collection<V> values()--只能把map里的所有value取出来
		        Collection<String> vs = map.values();//把map里的value们获取到
		        for (String v : vs) {//迭代Collection获取每个value
		            System.out.println("v = " + v);
		        }
		        //方式3::Set<Map.Entry<K,V>> entrySet()
		             //把map里数据的key和value都获取到并封装成Entry存入set中
		       Set<Map.Entry<Integer,String>> entrys = map.entrySet();
		        //迭代set,获取每个entry
		       for(Map.Entry<Integer,String> entry :entrys){
		            //再获取entry封装着的key和value
		           Integer k = entry.getKey();
		           String v = entry.getValue();
		           System.out.println(k+v);
		       }
		    }
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值