gpt4 book ai didi

java - 具有不同查询参数类型的 Spring REST 端点

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

我想知道如何在 Spring Boot 中实现 REST 端点,以便它将返回基于两个条件的对象列表,这将是值列表或单词“ALL”。

例如:我想检索来自任何给定国家/地区的用户列表(我想提供字符串类型的国家/地区代码列表作为查询参数)并且属于任何给定组的一部分(我提供组的长类型 ID 列表)。这看起来有点像这样:

 @GetMapping("users")
public List<UserDto> findUsers(
@RequestParam("countries") List<String> countryCodes,
@RequestParam("groupIds") List<Long> groupsIds) {
return matchingService.findMatchingUsersBy(groupIds, countryCodes);
}

那么我的请求将类似于:

/v1/users?countries=US,UK,GE&groupIds=1,4,5,6

现在,如果我希望在一个或两个参数也为“ALL”时使其工作,如下所示:

/v1/users?countries=ALL&groupIds=ALL 
/v1/users?countries=UK,FR&groupIds=ALL
/v1/users?countries=ALL&groupIds=1,2,3

这里的期望是应用程序将从数据库中获取所有可能的值并据此进行搜索。

我非常确定我会收到一个异常,指出“ALL”不是 List groupId 的有效 Long 值。

有没有办法根据不同的查询参数类型为同一端点提供不同的实现?最干净的方法是什么?

最佳答案

当您想要根据特定国家/地区代码和组 ID 检索数据时,无需传递任何内容,只需将 requestParams 设置为可选并在代码上处理即可。

 @GetMapping("users")
public List<UserDto> findUsers(
@RequestParam("countries", required = false) List<String> countryCodes,
@RequestParam("groupIds", required = false) List<Long> groupsIds) {
if(countryCodes == null){
countryCodes = fetchCountryCodeFromRepo();
}
if(groupIds == null){
groupIds = fetchGroupIdsFromRepo();
}
return matchingService.findMatchingUsersBy(groupIds, countryCodes);
}

关于java - 具有不同查询参数类型的 Spring REST 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57393401/

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