【问题标题】:Send a map as request param to a GET request in Spring Boot app将地图作为请求参数发送到 Spring Boot 应用程序中的 GET 请求
【发布时间】:2019-12-20 05:20:53
【问题描述】:

基本上,我需要在 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 调用中工作吗?

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

【问题讨论】:

  • @Aakash,我的线程和他的线程之间的唯一区别是他需要将“所有参数”绑定到地图,而我需要映射到地图的字段,而其他字段应该仍然有效。
  • 您的names 查询参数与您的names 属性的形状不匹配;该参数看起来像无效的 JSON,它是一系列单个字符串,既不是 MultiValued 也不是 Map
  • @AMagic 在接受的答案中提供了一个 Spring MVC 指南链接,它告诉我们所有参数都将添加到地图中。要回答您的问题,这是可行的,但在该答案中有一个很好的说明。
  • @chrylis-onstrike- 我有一个非常粗略的例子,你想建议在 URL 中传递地图的正确方法吗?

标签: java rest spring-boot model-view-controller


【解决方案1】:

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

请求对象

{
    "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 对象

【讨论】:

    【解决方案2】:

    server.tomcat.relaxed-query-chars=[,]application.properties 文件中

    然后您可以使用如下所示的 url 在地图中发送参数

    users?age=20&amp;gender=Male&amp;names[john]=doe&amp;names[Harry]=Potter&amp;names[James]=Bond

    【讨论】:

      猜你喜欢
      • 2017-10-20
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      相关资源
      最近更新 更多