java - 将地图作为请求参数发送到 Spring Boot 应用程序中的 GET 请求
问题描述
基本上我需要在 GET 请求中接受地图以及其他请求参数。
控制器:
@GetMapping
public Page<Users> search(@Valid final UsersParams params) {
return userService.search(params);
}
我的 params 对象如下所示:
public class UserParams {
private String age;
private String gender;
private MultiValuedMap<String, String> names;
}
因此,如果我使用这些参数值传递请求:
users?age=20&gender=Male&names={"john,doe","Harry,Potter","James,Bond"}
这甚至可以在请求中传递地图并使其在 GET REST 调用中工作吗?
凭借我所拥有的任何微小知识,我能想到的唯一其他选择是,使用带有逗号分隔值的列表代替地图并进行一些反序列化破解。
解决方案
您可以尝试的最佳方法是将此请求设为发布请求。然后你可以使用,
请求对象
{
"age" : 20,
"gender" : "Male",
"names" : {
"john" : "doe"
}
}
DTO
@AllArgsConstructor
@NoArgsConstructor
@Data
class UserParams {
String age;
String gender;
Map<String, String> names;
}
@PostMapping("/test2")
public void search2(@RequestBody UserParams params) {
log.info("This is the object we got", params);
}
如果你希望它是 GET 比你可以这样使用,
/test?age=20&gender=Male&john=doe&Harry=Potter
@GetMapping("/test")
public void search(UserParams params, @RequestParam Map<String, String> names) {
log.info("This is the object we got", params);
}
您将在其中获得 UserParams 中的年龄和性别以及名称 Map 中的所有对,您需要忽略名称 requestparam 中的前两个条目,因为年龄和性别也会出现在其中。
推荐阅读
- django - 如何将 django 中的查询集转换为 json
- mysql - Mysql:如何在字符串列表中查找列值
- bash - 如何使用 Cadaver 上传名称中带有空格的文件?
- php - 在 PHP POST 表单中传递一个巨大的数组,以便基于这个数组创建一个 CSV 文件
- java - 如何修复 couchbase “获取对 rev hotel_4396 的错误响应 - > 错误的用户”
- rest - 尝试使用 Symfony 4 / Apli Platform Token not found 401 构建身份验证
- java - Java NIO 套接字阻塞通道已连接/打开
- python-3.x - Selenium 错误:缺少 1 个必需的位置参数:'url'
- php - 从 PHP 中的数组中删除空的 stdclass 对象
- java - 如何使用扩展视图而不是全部视图绘制棋盘