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

标签 java spring rest

我想知道如何在 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/

相关文章:

c# - C# 中的单例模式

java - 读取制表符分隔的文件并忽略空格

java - ZXing IntentResult 无法解析为类型

java - 如何在服务器端存储邮件密码?

java - 从 CSR 文件获取 SSL 证书

java - 为什么这段代码会进入无限循环?

java.lang.ClassCastException : [B > cannot be cast to java. lang.String

java - 在spring boot中重命名application.properties,也用于spring boot测试

api - 如何使用 REST api 实现复杂查询?

web-services - RESTful Web 服务 - 如何验证来自其他服务的请求?