@ResponseBody,@RequestBody和@RequestParam()的使用

本文仅仅是使用层面的解释

  • @ResponseBody

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

简而言之,就是会将controller返回的对象,换成了key-value型式的数据
例子:

@RequestMapping("/login.do")
    @ResponseBody
    public Object login(String name, String password, HttpSession session) {
        user = userService.checkLogin(name, password);
        session.setAttribute("user", user);
        return new JsonResult(user);
    }
  • @RequestBody和@RequestParam()
    参考文档
    总结如下:
    这两个是用来接受数据的注解
    RequestParam内部有4个参数:
  • value请求参数的参数名,作为参数映射名称。
  • name同value
  • required该参数是否必填,默认为true(必填),当设置成必填时,如果没有传入参数,报错。
  • defaultValue 设置请求参数的默认值。
    例子:
package com.lanhuigu.springmvc.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
 
/**
 1. RequestParam注解绑定请求参数
 2. @author yihonglei
 */
@Controller
@RequestMapping("/testRP")
public class RequestParamController {
    private static final String SUCCESS="success";
    /**
     * @RequestParam 映射请求参数
     * value 请求参数的参数名 ,作为参数映射名称
     * required 该参数是否必填,默认为true(必填),当设置成必填时,如果没有传入参数,报错
     * defaultValue 设置请求参数的默认值
     */
    @RequestMapping(value="/testRequestParam")
    public String testRequestParam(
            @RequestParam("username") String username,
            @RequestParam(value="age",required=false,defaultValue="0") int age) {
        System.out.println("testRequestParam,username="+username+",age="+age);
        return SUCCESS;
    }
}

@RequestBody基础知识介绍

  1. @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
  2. 在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
  3. 当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、数组、集合、对象等等
    即:如果参数时放在请求体中,传入后台的话,那么后台要用@RequestBody才能接收到;如果不是放在
    请求体中的话,那么后台接收前台传过来的参数时,要@RequestParam来接收,或则形参前什么也不写也能接收。
    4.如果参数前写了@RequestParam(xxx),那么前端必须有对应的xxx名字才行(不管其是否有值,当然可以通过设置该注解的required属性来调节是否必须传),如果没有xxx名的话,那么请求会出错,报400;如果参数前不写@RequestParam(xxx)的话,那么就前端可以有也可以没有对应的xxx名字,如果有xxx名
    的话,那么就会自动匹配;没有的话,请求也能正确发送。
    追注:这里与feign消费服务时不同;feign消费服务时,如果参数前什么也不写,那么会被默认是@RequestBody的。并且A微服务中的空值“”向B服务传输会变成NULL,这样的话不便于接受,解决办法是设置defaultvalue或者required = false,或者直接去掉接收参数(@RequestParam和@RequestBody)来解决,当然了,如果不申明默认值得到的是null

@RequestBody前后端数据的接受
前端是通过key-value的形式传进来的,后端的接受情况如下:
json字符串中,
如果value为"“的话,后端对应属性如果是String类型的,那么接受到的就是”",如果是后端属性的类型是Integer、Double等类型,那么接收到的就是null。
如果value为null的话,后端对应收到的就是null。
千万不能传空值(但是form表单是可以的,from表单提交和JSON区别
在这里插入图片描述

相关用法:

@RequestBody可以以String、简单对象、复杂对象来进行数据接受

User实体类:
在这里插入图片描述
Team实体类:
在这里插入图片描述
@RequestBody直接以String接收前端传过来的json数据:
后端对应的Controller:
在这里插入图片描述
使用PostMan测试:
在这里插入图片描述
@RequestBody以简单对象接收前端传过来的json数据:
后端对应的Controller:
在这里插入图片描述
使用PostMan测试:
在这里插入图片描述
@RequestBody以复杂对象接收前端传过来的json数据:
后端对应的Controller:
在这里插入图片描述
使用PostMan测试:
在这里插入图片描述
@RequestBody与简单的@RequestParam()同时使用:
后端对应的Controller:
在这里插入图片描述
使用PostMan测试:
在这里插入图片描述
@RequestBody与复杂的@RequestParam()同时使用:
后端对应的Controller:
在这里插入图片描述
使用PostMan测试:
在这里插入图片描述
@RequestBody接收请求体中的json数据;不加注解接收URL中的数据并组装为对象:
后端对应的Controller:
在这里插入图片描述
使用PostMan测试:
在这里插入图片描述
原文中还有一些更深的探讨,原理型的探讨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

PH = 7

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

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

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

打赏作者

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

抵扣说明:

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

余额充值