首页 > 解决方案 > 将地图作为请求参数发送到 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 调用中工作吗?

凭借我所拥有的任何微小知识,我能想到的唯一其他选择是,使用带有逗号分隔值的列表代替地图并进行一些反序列化破解。

标签: javarestspring-bootmodel-view-controller

解决方案


您可以尝试的最佳方法是将此请求设为发布请求。然后你可以使用,

请求对象

{
    "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 中的前两个条目,因为年龄和性别也会出现在其中。

您只能保留 Map 而不是 Userparam 对象 这是我得到的结果


推荐阅读