查看原文
其他

【317期】@RequestBody 接收数组、List 参数、@Deprecated 标记废弃方法

Java精选 2022-08-09

点击上方“Java精选”,选择“设为星标”

别问别人为什么,多问自己凭什么!

下方有惊喜,留言必回,有问必答!

每一天进步一点点,是成功的开始...

目录

  • @RequestBody 概述
  • 接收单个 String 参数
  • 接收 字符串数组 参数
  • 接收 List 参数
  • 接收整形数组
  • 接收单个 POJO 对象
  • 接收 POJO List 参数
  • @Deprecated 标记废弃方法

@RequestBody概述

1、@RequestBody 主要用来接收前端传递给后端的 json 格式的数据的(请求体中的数据的),有一个属性 required,表示参数是否必须要传,默认为 true.

2、GET 方式无请求体,所以 @RequestBody 接收数据时,前端必须是 POST 方式进行提交,然后给页面的数据默认也是 json

3、同一个方法中, @RequestBody  与 @RequestParam()  可以同时使用,前者最多只能有一个,后者可以有多个,

4、@RequestBody 接收的是请求体里面的数据, @RequestParam  接收的是 key-value  里面的参数。

接收单个String参数

后台代码:

/**
 * 单个参数时使用 String 类型传输,比如 int、long、flout 等等,都使用 String
 *
 * @param uid
 * @return
 */

@PostMapping("save4")
public String save4(@RequestBody String uid) {
    logger.info("保存单个参数:" + uid);
    return "保存完毕:" + uid;
}

前端 ajax 代码:

$.ajax({
    //默认传输的内容类型为 key-value 型,后台使用数组、List 接收参数时,
    // headers 中必须指定内容类型为 json 类型,否则会报415错误
    headers: {
        'Content-Type''application/json;charset=utf8'
    },
    type"post",
    url"http://localhost:8080/user/save4",
    //指定 json 类型后,传输的数据理所当然应该是 json 格式。
    dataJSON.stringify({"uid""9527"}),
    successfunction (data) {
        console.log(data);
    },
    errorfunction (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
});

接收字符串数组参数

另外,推荐下 Spring boot 的用户权限管理系统开源项目:

https://gitee.com/yoodb/jing-xuan

后台 MVC 代码:

 /**
 * @param ids :接收页面单个:参数字符串数组。必须加 org.springframework.web.bind.annotation.RequestBody 注解。
 * 如果是整形数组,则换成  Integer[] ids 即可。
 * @return
 */

@PostMapping("save1")
public String save1(@RequestBody String[] ids) {
    logger.info("save1--->" + Arrays.asList(ids));
    return new Date() + "传输完毕:" + Arrays.asList(ids);
}

前端 ajax 代码:

var data = ["18ui""89uj""987u""98uj"];//如果后台接收的是整形数组,则 data 中使用整形即可,如:data = [80, 90, 100, 110,120];
$.ajax({
    //默认传输的内容类型为 key-value 型,后台使用数组、List 接收参数时,
    // headers 中必须指定内容类型为 json 类型,否则会报415错误
    headers: {
        'Content-Type''application/json'
    },
    type: "post",
    url: "http://localhost:8080/user/save1",
    //指定 json 类型后,传输的数据理所当然应该是 json 格式。
    data: JSON.stringify(data),
    success: function (data) {
        console.log(data);
    },
    error: function (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
});

接收List<Map<String,Object>参数

完全与数组同理,后台 MVC 代码:

/**
 * @param ids :接收页面单个:字符串 List。必须加 @RequestBody 注解
 * @return
 */

@PostMapping("save2")
public String save2(@RequestBody List<String> ids) {
    logger.info("save2--->" + ids);
    return new Date() + "传输完毕:" + ids;
}

前端 ajax 代码(与数组前端完全一致):

//因为 ArrayList 底层也是数组,不难明白前端都传数组
var data = [{"name""华安""id"9527"salary"8890.98}, {"name""张三""id"9528"salary"8790.98}];
 
$.ajax({
    //默认传输的内容类型为 key-value 型,后台使用数组、List 接收参数时,
    // headers 中必须指定内容类型为 json 类型,否则会报415错误
    headers: {
        'Content-Type''application/json'
    },
    type: "post",
    url: "http://localhost:8080/user/save2",
    //指定 json 类型后,传输的数据理所当然应该是 json 格式。
    data: JSON.stringify(data),
    success: function (data) {
        console.log(data);
    },
    error: function (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
});
   /**
     * http://localhost:8080/sys/backupSalary
     * 页面传入 json 数据:[{"name":"华安","id":9527,"salary":8890.98}]
     * 直接转换为 List<Map>
     *
     * @param mapList
     * @return
     * @throws JsonProcessingException
     */

    @PostMapping("backupSalary")
    public String backupSalary(@RequestBody List<Map<String,Object>> mapList) throws JsonProcessingException {
        System.out.println(mapList);
        ObjectMapper objectMapper = new ObjectMapper();
        String result = objectMapper.writeValueAsString(mapList);
        return result;
    }

接收整形数组

整型 List 、Flout等其它类型也是同理,会自动转型。后台代码:

/**
 * Long[] ids 参数时,前端也使用整型
 *
 * @param ids
 * @return
 */

@PostMapping("save5")
public String save5(@RequestBody Long[] ids) {
    logger.info("save5--->" + Arrays.asList(ids));
    return new Date() + "传输完毕:" + Arrays.asList(ids);
}

前端 ajax 代码:

var data = [123451022];
$.ajax({
    //默认传输的内容类型为 key-value 型,后台使用数组、List 接收参数时,
    // headers 中必须指定内容类型为 json 类型,否则会报415错误
    headers: {
        'Content-Type''application/json;charset=utf8'
    },
    type"post",
    url"http://localhost:8080/user/save5",
    //指定 json 类型后,传输的数据理所当然应该是 json 格式。
    dataJSON.stringify(data),
    successfunction (data) {
        console.log(data);
    },
    errorfunction (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
});

接收单个POJO对象

后台提供一个 POJO 对象:

class User {
    private Integer uId;
    private String uName;
 
    public Integer getuId() {
        return uId;
    }
 
    public void setuId(Integer uId) {
        this.uId = uId;
    }
 
    public String getuName() {
        return uName;
    }
 
    public void setuName(String uName) {
        this.uName = uName;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "uId=" + uId +
                ", uName='" + uName + '\'' +
                '}';
    }
}

后台 mvc 代码:

/**
 * 保存单个实体
 *
 * @param user
 * @return
 */

@PostMapping("save6")
public String save6(@RequestBody User user) {
    logger.info("save6=> " + user.toString());
    return "保存完成:" + user;
}

前端 ajax 代码:

var data = {"uId"1000"uName""华安"};
$.ajax({
    //默认传输的内容类型为 key-value 型,后台使用数组、List 接收参数时,
    // headers 中必须指定内容类型为 json 类型,否则会报415错误
    headers: {
        'Content-Type''application/json;charset=utf8'
    },
    type"post",
    url"http://localhost:8080/user/save6",
    //指定 json 类型后,传输的数据理所当然应该是 json 格式。
    dataJSON.stringify(data),
    successfunction (data) {
        console.log(data);
    },
    errorfunction (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
});

接收POJO List参数

POJO 数组也是同理。后台 MVC 代码:

 /**
 * @param userList :接收页面单个:POJO List。必须加 @RequestBody 注解
 * @return
 */

@PostMapping("save3")
public String save3(@RequestBody List<User> userList) {
    for (User user : userList) {
        logger.info("save3--->" + user);
    }
    return new Date() + "传输完毕:" + userList;
}

前端 ajax 代码:

//后台是 List<User>,则前台使用数组([])表示 List,使用 json 对象表示 User 对象
var data = [];
for (var i = 0; i < 3; i++) {
    var user = {};//每一个 json 对象相当于后台的 User 对象,因为都是 key-value 格式。
    user.uId = (i + 1);//key 值必须与后台 POJO 属性一致。value 的类型必须与后台数据类型一致。
    user.uName = "huaAn_" + (i + 1);
    data.push(user);//将 json 对象添加到数组中
}
$.ajax({
    //默认传输的内容类型为 key-value 型,后台使用数组、List 接收参数时,
    // headers 中必须指定内容类型为 json 类型,否则会报415错误
    headers: {
        'Content-Type''application/json'
    },
    type"post",
    url"http://localhost:8080/user/save3",
    //指定 json 类型后,传输的数据理所当然应该是 json 格式。
    dataJSON.stringify(data),
    successfunction (data) {
        console.log(data);
    },
    errorfunction (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
});

@Deprecated标记废弃方法

1、应用中对于外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响,过时接口可以加上@Deprecated注解,并清晰地说明采用的新接口或新服务是什么。

2、@Deprecated 注解表示 "废弃;不赞成;不推荐使用",可以标注的位置有:@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})

3、比如某个类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时编辑器也会自动提示删除线,但并不代表不能用,只是不推荐使用,因为还有更好的方法可以调用。

public class HelloWorld {
    //id 不再推荐使用,请使用 uId
    @Deprecated
    private String id;
    private String uId;
 
    //showInfo() 方法不再推荐使用,1.5 版本开始请使用 getInfo
    @Deprecated
    public void showInfo() {
        String info = "天下归心";
        System.out.println(info);
    }   
    /**
     * @since 1.5
     */

    public String getInfo() {
        String info = "天下归心";
        return info;
    }   
}

作者:蚩尤后裔

https://wangmaoxiong.blog.csdn.net/article/details/95042420

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

------ THE END ------

精品资料,超赞福利!

☆ 主流Java进阶技术(学习资料分享)


3000+ 道各类技术面试题在线刷,最新、最全 Java 面试题!

期往精选  点击标题可跳转

【308期】Java 实现 10 万,并发去重,优雅地处理重复请求!

【309期】Spring Bean 容器启动耗时统计分析

【310期】Spring Cloud 分布式 WebSocket 集群解决方案

【311期】4种方法,实现多线程按照指定顺序执行

【312期】天坑!常见的 update 语句很容易造成 Bug 问题

【313期】SpringBoot 无侵入式,实现 API 返回统一 JSON 格式

【314期】Spring Cloud OpenFeign 接口反序列化失效,该如何解决?

【315期】面试官问:在大数据量情况下,如何优化 ElasticSearch 查询?

【316期】面试官问:如何编写符合 REST 架构风格的 RESTful API?

 技术交流群!

最近有很多人问,有没有读者交流群!想知道如何加入?方式很简单,兴趣相投的朋友,只需要点击下方卡片,回复“加群”,即可无套路入交流群!

文章有帮助的话,在看,转发吧!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存