springMVC 中接收前端传递的对象、数组等数据的方式详解

本文详细介绍了在SpringMVC框架中如何通过不同方式接收前端传递的参数,包括基本数据类型、自定义对象以及数组等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.     引言
在springMVC中,controller中方法的参数是自动注入的,在使用注解的方式下,通常有:

                  @RequestParam:  取querystring当中的参数
                  @PathVariable:     取 在@RequestMapping中定义的占位符中的参数(/test/{id})
                  @RequestBody:   取request 这个消息体 (可以组装json对象)

在不使用注解的情况下,默认有一些对象可以自动注入如:

                  HttpServletRequest
                  HttpServletResponse
                  MultipartFile
                  MultipartRequest

除此之外不使用注解的情况下,也可以接受前台传入的querystring中的参数

2.      接受前端传递的对象

从querystring中的参数中获取:

@RequestParam:接受对象类型(Integer、String、Boolean等基本数据类型),不能接收自定义类型。

不带注解:接受基本数据类型,若接收类型为自定义类型,会组装参数中与自定义类型属性名和类型相符的参数。

例:

后台:

    @ResponseBody
    @RequestMapping("/accept-object")
    public String acceptObject(
            @RequestParam Integer studentId,
            @RequestParam String studentName,
            Integer studentAge,
            Student student
    ) {
        logger.debug("---->" + studentId);
        logger.debug("---->" + studentName);
        logger.debug("---->" + studentAge);
        logger.debug("---->" + JSON.toJSONString(student));
        return studentId + ">>" + studentName + ">>" +
                studentAge + ">>" + JSON.toJSONString(student);
    }
前端:

<div>
    <form action="${pageContext.request.contextPath}/accept-object">
        <span>学生id</span>
        <input type="number" name="studentId" placeholder="studentId"><br>
        <span>学生姓名</span>
        <input type="text" name="studentName" placeholder="studentName"><br>
        <span>学生年龄</span>
        <input type="number" name="studentAge" placeholder="studentAge"><br>
        <input type="submit" value="提交">
    </form>
</div>
过程及结果:

结论及分析:

1.获取自定义类型的对象时,不使用注解即可以获取

2.在组装对象时可以使用以被获取过的参数


从请求体(body)中获取:

用到的注解@RequestBody

当请求体中是一段json数据时,@RequestBody会解析该json字符串并将其注入指定的自定义类型中。

例:

后台代码:

    @ResponseBody
    @RequestMapping("/accept-json-object")
    public String acceptObject(
            @RequestBody Student student
    ) {
        logger.debug("---->" + JSON.toJSONString(student));
        return JSON.toJSONString(student);
    }
测试:


结果:

结论:通过@RequestBody的方式可以接收以json数据传输的对象,但前提是请求的Content-Type必须为application/json,并且引入了jackson-databind包。


3.      接收前端传递的数组

接收数组可以使用注解方式的@RequestParam、@RequestBody或者无注解的方式,也可以同时使用他们三个

在接受数组时,默认按照方法的参数名来映射请求的参数,目前很多前端框架喜欢传递数组时在请求参数后面加上"[]",所以使用@RequestParam时可以规定value使之对应如@RequestParam("ids[]") Integer[] ids。

例:

后台:

    @ResponseBody
    @RequestMapping(value = "/accept-arr-object")
    public String acceptArray(
            Integer[] ids,
            @RequestParam("ids[]") Integer[] id2s,
            @RequestBody Integer[] id3s
    ) {
        logger.debug("---->" + JSON.toJSONString(ids));
        logger.debug("---->" + JSON.toJSONString(id2s));
        logger.debug("---->" + JSON.toJSONString(id3s));
        return JSON.toJSONString(ids) + ">>" + JSON.toJSONString(id2s) + ">>" + JSON.toJSONString(id3s);
    }
测试:


结果:

4.      总结

在项目中,能够灵活的使用各种传参方式能灵活的实现与前端的交互,总之,自己喜欢的就是最好的。

### Spring MVC 接收前端发送 JSON 数组 为了实现Spring MVC接收来自前端的JSON数组,可以采用多种方式来处理不同类型的数组数据。以下是几种常见的方式。 #### 方法一:通过`@RequestBody`注解直接映射到Java集合类 当从前端发送的是简单的字符串或数值型数组时,可以直接利用`@RequestBody`注解释放其魔力[^4]: ```java @PostMapping("/receiveArray") public ResponseEntity<String> receiveSimpleArray(@RequestBody List<Integer> numbers){ // 处理逻辑... return new ResponseEntity<>("Success", HttpStatus.OK); } ``` 对于更复杂的情况比如对象列表,则可以通过定义相应的实体类并让框架自动完成转换工作[^3]: ```java // 定义实体类 class Employee { private Long id; private String name; // Getters and Setters omitted for brevity. } // 控制器方法 @PostMapping("/employees") public ResponseEntity<List<Employee>> addEmployees(@RequestBody List<Employee> employees) { // 对员工信息进行操作... return new ResponseEntity<>(employees, HttpStatus.CREATED); } ``` #### 方法二:使用自定义反序列化工具 如果遇到特殊需求无法满足默认行为的情况下,还可以考虑引入第三方库如Jackson来进行更加灵活的数据解析[^1]。 例如,在某些情况下可能需要对接收到的内容做预处理后再交给业务层去消费;此时可以在控制器之前设置拦截器或者过滤器来做这些事情。 另外值得注意的一点是在实际开发过程中应当注意前后端交互的安全性和效率问题,合理设计API接口以及做好异常捕获机制以保障系统的稳定运行。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值