gpt4 book ai didi

java - 使用查询参数处理 Spring-boot 过滤器

转载 作者:行者123 更新时间:2023-11-30 01:44:04 25 4
gpt4 key购买 nike

在 REST 端点中,我想接收过滤器作为查询参数。每个过滤器都定义在以逗号分隔的键值对中,如下所示:

www.example.com/things?filter=key:value,key2:value2,key3:value3

此示例意味着我尝试获取的事物列表必须将作为 key2 作为 value2 key3 作为 value3

在此端点中,我可以接收多个过滤器,如下所示:

www.example.com/things?filter=key:value&filter=key2:value2,key3:value3

这意味着事物列表必须将key作为value(key2作为 value2key3 作为 value3)

在 spring-boot 中,接收多个同名查询参数的方法是在 Controller 中定义一个 @RequestParam("filter") String[] 过滤器。但问题是:每当我只发送一个 filter 查询参数时,我都会得到一个由每个键对值形成的字符串数组。如果我发送多个过滤器,我将获得一个包含每个过滤器的数组(如预期)。

这意味着,对于第一个示例,每个 key 对都会有一个大小为 3 的数组,而在第二个示例中,我会收到一个大小为 2 的数组。

我需要,每当我只发送一个 filter 作为查询参数时,@RequestParam 标记会传递一个大小为 1 的数组,其中包含稍后要解析的整个字符串。有没有办法实现这个目标?

最佳答案

可能有更好的方法来实现您所追求的目标,但这是我的建议。

使用 Spring Boot 2.2.1.RELEASE 快速进行概念验证,在单独的行上打印每个过滤器

import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/things")
public class ThingController {

@GetMapping
public void filters(@RequestParam MultiValueMap<String, String> filters) {
System.out.println("Filters:");
filters.get("filter").forEach(System.out::println);
}
}
<小时/>

仅使用单个过滤器查询参数的curl命令:

curl -v 'http://localhost:8080/things/?filter=key:value,key2:value2,key3:value3'

打印:

Filters:
key:value,key2:value2,key3:value3
<小时/>

仅使用多个过滤器查询参数的curl命令:

curl -v 'http://localhost:8080/things/?filter=key:value&filter=key2:value2,key3:value3'

打印:

Filters:
key:value
key2:value2,key3:value3

关于java - 使用查询参数处理 Spring-boot 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58822619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com