SpringMVC中的接口传参接参总结

时间:2022-09-30 19:55:26

1. 注解 @PathVariable

1.1. 方式一

不推荐使用,仅在单个参数的时候选择使用

@GetMapping("/getId/{id}")
@ResponseBody
public String pathVariableTest(@PathVariable Integer id) {
	return "id:   " + id;
}

1.2. 方式二

推荐使用,适用于单个、多个参数的情况

1.2.1. 单个参数

@GetMapping("/getId/{id}")
@ResponseBody
public String pathVariableTest(@PathVariable("id") Integer id) {
	return "id:   " + id;
}

1.2.2. 多个参数

@GetMapping("/getIdAny/{id}/{name}")
@ResponseBody
public String pathVariableTestAny(@PathVariable("id") Integer id, @PathVariable("name") String name) {
	return "id:" + id + "name:" + name;
}

1.3. 方式三

@GetMapping("/getId/{idValue}")
@ResponseBody
public String pathVariableTest(@PathVariable("idValue") Integer id) {
	return "id:   " + id;
}

以上三种方式的调用结果都是成功的

SpringMVC中的接口传参接参总结

2. 注解 @RequestParam

@RequestParam:将请求参数绑定到你控制器的方法参数上,是 SpringMVC 中接收普通参数的注解

@RequestParam(value = "参数名", required = "true", defaultValue= " ")
  • valuename :参数名
  • required:是否包含该参数,默认为 true,表示该请求路径中必须包含该参数,如果不包含就报错
  • defaultValue:默认参数值,如果设置了该值,required = true 将失效,自动为 false,如果没有传该参数,就使用默认值

2.1. 方式一

不推荐使用,仅在单个参数的时候选择使用

@GetMapping("/getId")
@ResponseBody
public String requestParamTest(Integer id) {
	return "id:" + id;
}

2.2. 方式二

不推荐使用,仅在单个参数的时候选择使用

@GetMapping("/getId")
@ResponseBody
public String requestParamTest(@RequestParam Integer id) {
	return "id:" + id;
}

2.3. 方式三

推荐使用,适用于单个、多个参数的情况

2.3.1. 单个参数

@GetMapping("/getId")
@ResponseBody
public String requestParamTest(@RequestParam("idValue") Integer id) {
	return "id:" + id;
}

可以看到在 @RequestParam 里面给参数 id 取名为: idValue,这时候传参时参数名称也需要写成 idValue 即可

2.3.2. 多个参数

@GetMapping("/getIdAny")
@ResponseBody
public String requestParamTestAny(@RequestParam("id") Integer id, @RequestParam("name") String name, @RequestParam Integer age) {
	return  "id:" + id +"name:" + name + "age:" + age;
}

SpringMVC中的接口传参接参总结

2.4. 上传文件

使用 @RequestParam 上传文件的方式

@ResponseBody
@PostMapping("upload")
public String upload(@RequestParam("myFile") MultipartFile file)  {
	return "---file name:" + file.getOriginalFilename()+
                "---file type:" + file.getContentType()+
                "---file size:" + file.getSize();
}

SpringMVC中的接口传参接参总结

3. 注解 @RequestBody

对应 @RequestBody 的使用,方式其实是比较多的,可以耐心看看,传参以 json 格式传递,接收方式较多(一定要记住 Content-Typeapplication/json

3.1. 实体类

public class UserOne {
    private Integer id;

    private String username;

    private Integer age;
}

Get 方式 和 Post 方式其实都是可以使用 @requestBody 的,只不过一般来说 Post 用的较多

3.2. 传参与接参

@GetMapping("/getRequestBodyValue")
@ResponseBody
public String RequestBodyTest(@RequestBody UserOne userOne) {
	return  userOne.toString();
}

SpringMVC中的接口传参接参总结

4. 实体类传参接参

4.1. 实体类

public class UserOne {
    private Integer id;

    private String username;

    private Integer age;
}

4.2. 传参与接参

@GetMapping("/getValue")
@ResponseBody
public String entityValueTest(UserOne userOne) {
	return userOne.toString();
}

SpringMVC中的接口传参接参总结

5. 使用 JsonObject 接参

5.1. 依赖包

<!--添加fastjson依赖-->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.7</version>
</dependency>

5.2. 传参与接参

@PostMapping("/getRequestBodyValue")
@ResponseBody
public String RequestBodyTest(@RequestBody JSONObject jsonObject) {
 
	Integer id = jsonObject.getInteger("id");
    String name = jsonObject.getString("name");
    Integer age = jsonObject.getInteger("age");
 
	return  "---id:"+id+"  ---name:"+name+"  ---age:"+age;
}

SpringMVC中的接口传参接参总结

6. 使用 String 接参数

这种情况是先使用 Stringbody 里面的数据获取出来,再转换成 JsonObject 再进行参数解析

@PostMapping("/getRequestBodyValue")
@ResponseBody
public String RequestBodyTest(@RequestBody String jsonStr) {

	// 将 jsonStr 转化为 JSONObject,再进行取值
	JSONObject jsonObject= JSON.parseObject(jsonStr); 
	Integer id = jsonObject.getInteger("id");
    String name = jsonObject.getString("username");
    Integer age = jsonObject.getInteger("age");
    return  "---id:"+id+"  ---name:"+name+"  ---age:"+age;
}

SpringMVC中的接口传参接参总结

7. 使用 HttpServletRequest

7.1. 方式一

@GetMapping("/getHttpServletRequest")
@ResponseBody
public String httpServletRequestValueTest(HttpServletRequest request) {

	String id = request.getParameter("id");
    String name = request.getParameter("username");
    String age = request.getParameter("age");
    return  "---id:"+id+"  ---name:"+name+"  ---age:"+age;
}

7.2. 方式二

@GetMapping("/getHttpServletRequest")
@ResponseBody
public String httpServletRequestValueTest(HttpServletRequest request) {
 
	Map<String, String[]> parameterMap = request.getParameterMap();
    String[] ids = parameterMap.get("id");
    String[] names = parameterMap.get("username");
    String[] ages = parameterMap.get("age");
    String id = ids[0];
    String name =names[0];
    String age =ages[0];
 
	return  "---id:"+id+"  ---name:"+name+"  ---age:"+age;
}

以上两种方式调用结果

SpringMVC中的接口传参接参总结