Spring之@ResponseBody,@RequestParam,@PathVariable ,@PathParam, @RequestBody 如何使用和相互之间的区别

一、首先比较这两个注解@RequestParam和@PathVariable的区别,它们都是用于request请求接受参数只用。

  1. @RequestParam是从请求体重获取参数值
 @ResponseBody
    @RequestMapping(value = "/h",method = RequestMethod.GET)
    public Map<String,Object> login( @RequestParam Integer param){
        Map map = new HashMap() ;
        switch (param){
            case 0:
                map.put("msg","你是邱工么");
                break;
            case 1:
                map.put("msg","你真的是邱工么");
                break;
            case 2:
                map.put("msg","是的  我是邱工");
                break;
            case 3:
                map.put("msg","hello! 邱工");
                break;
            case 4:
                map.put("msg","邱工哈哈");
                break;
            case 5:
                map.put("msg","邱工呵呵");
                break;

            default:{
                map.put("msg","邱工是个女的!");
                break;
            }
        }
        return map ;
    }

get方式请求
http://localhost:8000/login/h?param = 3
在这里插入图片描述

post方式请求
http://localhost:8000/login/h

 @ResponseBody
    @RequestMapping(value = "/h",method = RequestMethod.POST)
    public Map<String,Object> login( @RequestParam Integer param){
        Map map = new HashMap() ;
        switch (param){
            case 0:
                map.put("msg","你是邱工么");
                break;
            case 1:
                map.put("msg","你真的是邱工么");
                break;
            case 2:
                map.put("msg","是的  我是邱工");
                break;
            case 3:
                map.put("msg","hello! 邱工");
                break;
            case 4:
                map.put("msg","邱工哈哈");
                break;
            case 5:
                map.put("msg","邱工呵呵");
                break;

            default:{
                map.put("msg","邱工是个女的!");
                break;
            }
        }
        return map ;
    }

在这里插入图片描述

  1. @PathVariable是从url中获取请求值

get方式请求

    @ResponseBody
    @RequestMapping(value = "/h/{param}",method = RequestMethod.GET)
    public Map<String,Object> login1( @PathVariable Integer param){
        Map map = new HashMap() ;
        switch (param){
            case 0:
                map.put("msg","你是邱工么");
                break;
            case 1:
                map.put("msg","你真的是邱工么");
                break;
            case 2:
                map.put("msg","是的  我是邱工");
                break;
            case 3:
                map.put("msg","hello! 邱工");
                break;
            case 4:
                map.put("msg","邱工哈哈");
                break;
            case 5:
                map.put("msg","邱工呵呵");
                break;

            default:{
                map.put("msg","邱工是个女的!");
                break;
            }
        }
        return map ;
    }

请求地址格式:http://localhost:8000/login/h/{param}
http://localhost:8000/login/h/0
在这里插入图片描述二、@ResponseBody和@RequestBody两者的作用以及如何使用的?
1、@ResponseBody的作用是将java数据格式转换为JSON数据格式 (后台 -> 前台)

如果控制类使用的是@Controller那么函数上一定需要加@ResponseBody,不然会报错

    @ResponseBody
    @PostMapping("/pwd2")
    public Map loginByPwd1(@RequestBody PostUserBean postUserBean)

2、@RequestBody 将前台JSON 对象数据转换为后台可处理数据 (前台 -> 后台)

1.如果参数时放在请求体中,application/json传入后台的话,那么后台要用@RequestBody才能接收到;
2.如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或者形参前 什么也不写也能接收。
3.如果参数前写了@RequestParam(xxx),那么前端必须有对应的xxx名字才行(不管其是否有值,当然可以通过设置该注解的required属性来调节是否必须传),如果没有xxx名的话,那么请求会出错,报400。

    @ResponseBody
    @PostMapping("/pwd2")
    public Map loginByPwd1(@RequestBody PostUserBean postUserBean){
        Map map = new HashMap() ;
        if (postUserBean == null || postUserBean.getName() == null ||!postUserBean.getName().equals("邱工")){
            map.put("msg","请传入{“Name:邱工”}");
        } else {
            map.put("classInfo",classInfoBean.userInfo());
        }
        return map;
    }

三、@PathParam和@RequestParam具有相同的使用,都是重request的请求中获取值,@RequestParam属于Spring,@PathParam是在javax.websocket.server这个包下的类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

将哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值