微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 为互斥请求参数设计API的更好方法是什么?

当请求参数互斥时,在@Controller方法上设计API的更好方法是什么?

假设有一个API来提供与请求参数匹配的用户列表.

代码是:

public ResponseEntity getList(@RequestParam(required = false) Integer userId,@RequestParam(required = false) User.Type userType,@RequestParam(required = false) Integer age) {
        List

这是重点:

用户无法使用多个请求参数进行查询.只有一个请求参数或没有请求参数有效(请求中只应存在userId,age或type中的一个).

我不确定为这种情况设计API的更好方法是什么.你能给我一些建议吗?

最佳答案
我喜欢这些家伙在评论中建议的方法

@RequestMapping(value = "...",params = {"!userType","!userAge"})
public ResponseEntityaram Integer userId) { ... }

// similarly,define two more

在您开始管理每个端点的限制之前,它看起来健壮且可行.它看起来很乏味,很难维护.此外,我不确定没有参数的终点会如何反应.是否会被其他方法调用或遮蔽?

我建议引入条件 – 每个端点的要求,而不是写限制.它可以是Map< String,Function< String,List< User>>>在下一格式中:

aram name> -> 

我还建议你将所有传入的请求参数收集到一个Map< String,String>按大小验证它.

public class Controller {

    private Maparam Maparams) {
        if (params.size() > 1) {
            return ResponseEntity.unprocessableEntity().build();
        }

        if (params.size() == 0) {
            return ResponseEntity.ok(getAllWithoutCondition());
        }

        Map.EntryaramEntry = params.entrySet().iterator().next();

        return ResponseEntity.ok(handlers.get(paramEntry.getKey()).apply(paramEntry.getValue()));
    }

    private List

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐