Java控制器如何接收List对象参数数据

本文详细介绍了如何在Java控制器中通过@RequestBody注解接收List对象参数数据,包括数据格式及PostMan请求参数设置,适用于希望优化API数据交互的开发者。

Java控制器如何接收List对象参数数据


前言

今天就为大家介绍一下–Java控制器如何接收List对象参数数据,虽然简单但是有时你还就是不知道为什么。


数据格式

如下数据,是一个list对象。

[{
  "key": 1,
  "headerKey": 1,
  "complete": "7天",
  "medalName": "今日旺旺1"
 },
 {
  "key": 2,
  "headerKey": 1,
  "complete": "10天",
  "medalName": "今日旺旺2"
 },
 {
  "key": 3,
  "headerKey": 1,
  "complete": "15天",
  "medalName": "今日旺旺3"
 }
]

PostMan请求参数

在这里插入图片描述

控制器如何接收呢

在控制器接收list对象参数时请使用@RequestBody进行注解,即可直接传递List<对象>参数,代码如下。

public Map<Object,String> updateMyDemoByList(@RequestBody List<对象> list){
	// 逻辑代码
	return xxx; // 自由操作
}

最后

  • 更多参考精彩博文请看这里:陈永佳的博客

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

### Java 控制器接口中参数注解的使用方法 在 Java 的 Spring MVC 中,控制器接口中的参数可以通过多种注解来进行绑定和校验。这些注解可以简化开发过程并提高代码可读性和安全性。 #### 基本概念 Spring 提供了一系列用于处理 HTTP 请求参数的注解,它们能够帮助开发者轻松地将请求数据映射到方法参数上。以下是常见的几种注解及其用途: 1. **@RequestParam** - 该注解用于绑定 URL 查询参数或表单提交的数据[^1]。 - 如果参数是必需的,则可以在注解中设置 `required=true`;如果允许为空,则设为 `false`。 ```java @GetMapping("/example") public String example(@RequestParam(required = false) String param) { return "Param is: " + param; } ``` 2. **@PathVariable** - 用于提取路径变量中的值[^1]。 - 路径变量通常出现在 RESTful 风格的 API 设计中。 ```java @GetMapping("/users/{id}") public String getUserById(@PathVariable Long id) { return "User ID: " + id; } ``` 3. **@RequestBody** - 将 JSON 或 XML 格式的请求体转换为目标对象[^1]。 - 这种方式适用于 POST 和 PUT 请求。 ```java @PostMapping("/create") public ResponseEntity<String> createUser(@RequestBody User user) { return new ResponseEntity<>("Created", HttpStatus.CREATED); } ``` 4. **@RequestHeader** - 绑定 HTTP 头部字段的内容[^1]。 ```java @GetMapping("/headers") public String getHeaders(@RequestHeader("Authorization") String authHeader) { return "Auth Header: " + authHeader; } ``` 5. **@CookieValue** - 获取 Cookie 的值。 ```java @GetMapping("/cookies") public String getCookies(@CookieValue("JSESSIONID") String sessionId) { return "Session ID: " + sessionId; } ``` --- #### 自定义注解解析 当默认的注解无法满足需求时,可以创建自定义注解并通过实现 `HandlerMethodArgumentResolver` 接口来自定义参数解析逻辑[^1]。例如: ```java public class CustomAnnotationResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.getParameterType().equals(CustomObject.class) && parameter.hasParameterAnnotation(CustomAnnotation.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { // 实现具体的解析逻辑 return new CustomObject(); } } ``` 随后注册此解析器即可生效。 --- #### 参数校验 为了确保传入的参数合法有效,可以利用 JSR 303/Bean Validation 定义的一系列约束注解进行校验[^3][^4]。以下是一些常用的校验注解示例: | 注解 | 描述 | |--------------|----------------------------------------| | `@NotNull` | 字段不可为 null | | `@NotBlank` | 字符串不为空白字符 | | `@Min`, `@Max` | 数字范围限制 | | `@Size` | 集合、字符串长度限制 | | `@Email` | 验证电子邮件格式 | ##### 示例代码 ```java import javax.validation.constraints.*; public class UserDTO { @NotBlank(message = "用户名不能为空") private String username; @Email(message = "邮箱格式错误") private String email; @Min(value = 18, message = "年龄不得低于18岁") private int age; // Getters and Setters... } @PostMapping("/register") public ResponseEntity<?> register(@Valid @RequestBody UserDTO userDto) { if (userDto.getUsername() != null && !userDto.getUsername().isEmpty()) { return ResponseEntity.ok("Success"); } else { return ResponseEntity.badRequest().body("Invalid input"); } } ``` --- #### 解决 List 类型参数传递问题 对于列表类型的参数传递,由于接口本身无构造函数,因此需要通过其他形式间接完成。一种常见的方式是将其封装在一个实体类中[^2]。例如: ```java class RequestWrapper<T> { private List<T> items; public List<T> getItems() { return items; } public void setItems(List<T> items) { this.items = items; } } @PostMapping("/submitList") public ResponseEntity<?> submitList(@RequestBody RequestWrapper<String> wrapper) { System.out.println(wrapper.getItems()); return ResponseEntity.ok("Received list of size: " + wrapper.getItems().size()); } ``` --- ### 总结 Java 控制器接口中的参数注解提供了强大的功能支持,无论是基本类型还是复杂对象都可以灵活应对。同时结合 Bean Validation 可进一步增强系统的健壮性与用户体验。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陈永佳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值