@RequestParam、@RequestBody、@PathVariable

实体类准备

@Data
public class Test implements Serializable {
  
    private String id;

    private String name;

    private String state;

    private String createTime;

}

@RequestParam

一个请求可以有多个RequestParam

@RequestParam 接收普通参数的注解 一般与get请求一起使用
@RequestParam(value=“参数名”,required=“true/false”,defaultValue=“如果没有本值为这个参数的值”)
required默认为true,当为false时才可以使用defaultValue

@GetMapping("/getDataById")
public String getDataById(@RequestParam(value = "id",required = false,defaultValue = "1") String id){

    //使用mybatis-plus来根据id查询数据
    Test test = testMapper.selectById(id);

    return test.toString();

    //结果: Test{id='1', name='dd', state='A', createTime='null'}
}
@RequestMapping("demo")
public String demo(Model model
    // 走默认装配规则,参数名称和名字一致,选传
    ,String name
     // 参数名称和名字默认一直,必传参数,不传报错
    ,@RequestParam String name0
    // 通过value属性定义名称,必传参数,不传报错
    ,@RequestParam(value = "name1") String name1
     // 通过name属性定义,非必传参数
    ,@RequestParam(name = "name2",required = false) String name2
     // 通过value属性定义,必传参数,有默认值,可以不传自动赋值
    ,@RequestParam(value = "name3",defaultValue = "t3") String name3
    // 自定义参数名字,不必加name或者value属性,必传
    ,@RequestParam("name444") String name4
){
    System.out.println("name:"+name);
    System.out.println("name0:"+name0);
    System.out.println("name1:"+name1);
    System.out.println("name2:"+name2);
    System.out.println("name3:"+name3);
    System.out.println("name4:"+name4);
    return "hello";
}
请求
/demo?name=t&name0=t0&name1=t1&name2=t2&name444=t44

结果
name:t
name0:t0
name1:t1
name2:t2
name3:t3
name4:t44

必传参数name1,不传会报400错误String parameter 'xxx' is not present

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Tue Apr 13 11:16:17 CST 2021
There was an unexpected error (type=Bad Request, status=400).
Required String parameter 'name1' is not present
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'name1' is not present
	at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:202)
	at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:113)
	at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:126)
	at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:166)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895

@RequestBody

一个请求,只能有一个RequestBody
@RequestBody(required=“true/false”)
@RequestBody:一般来接受请求体中json的注解 一般与post请求一起使用
required默认为true(必传,要不报错)

@PostMapping("/insertData")
public int insertData(@RequestBody Test test){

    //使用mybatis-plus来插入新数据
    int insert = testMapper.insert(test);

    return insert;

    //结果: 1
}

@PathVariable

一个请求,可以有多个PathVariable
@PathVariable 映射URL绑定的占位符 一般与get请求一起使用
@PathVariable(value=“参数名”,required=“true/false”)

@GetMapping("/getById/{id}")
public String getById(@PathVariable String id){
    //使用mybatis-plus来根据id查询数据
    Test test = testMapper.selectById(id);

    return test.toString();

    //结果: Test{id='1', name='dd', state='A', createTime='null'}
}
@RequestMapping(value={
        "demo1/{name1}/{name2}/{name3}"
        // 配合name3选传,此种场景应用较少,一般使用此注解均为必传参数
        ,"demo1/{name1}/{name2}"
})
public String demo1(Model model
        //注意,没加注解,使用问号后追加参数请求
        ,String name
        // 必传
        ,@PathVariable String name1
        // 必传
        ,@PathVariable("name2") String name2
        // 选传
        ,@PathVariable(value = "name3",required = false) String name3
){
    System.out.println("name:"+name);
    System.out.println("name1:"+name1);
    System.out.println("name2:"+name2);
    System.out.println("name3:"+name3);
    return "hello";
}

注解@PathVariable必传的参数类型不加参数会报404

请求
/demo1/t1/t2?name=t0
/demo1/t1/t2/t3
/demo1/t1  ===> 404地址找不到

结果
/demo1/t1/t2?name=t0
/demo1/t1/t2/t3
/demo1/t1  ===> 404地址找不到

区别使用场景

@RequestParam 一般在get请求时,参数是一个个的参数时,请求url一般为
	http://localhost:8089/test/getDataById?id=1
@RequestBody 一般在post请求时,参数是一个对象或者集合时,请求一般为json类型的请求体
@PathVariable 一般在get请求时,参数是一个个的参数时,更能体现RestFul风格,请求url一般为:
	http://localhost:8089/test/getDataById/1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值