Java 如何在生成GET请求时限制允许的参数和值?

Java 如何在生成GET请求时限制允许的参数和值?,java,http,enums,get,Java,Http,Enums,Get,我正在尝试创建一个访问在线RESTful API的库。API定义了一个已实现方法的列表,并允许每个方法使用参数,以及(在某些情况下)给定参数的允许值。我想我应该确保(A)只能调用实现的方法;(B) 对于给定的方法,只能定义允许的参数;和(C)如果给定参数只允许某些值,则只允许这些值 (A) 仅使用枚举“方法”相对容易: 对于(B)我认为方法的每个实例都需要有它自己的允许参数枚举,对于(C)一些参数,允许值枚举,有点类似(如果这让任何人感到害怕,我很抱歉): 注意:以下代码不是有效的JAVA代码;

我正在尝试创建一个访问在线RESTful API的库。API定义了一个已实现方法的列表,并允许每个方法使用参数,以及(在某些情况下)给定参数的允许值。我想我应该确保(A)只能调用实现的方法;(B) 对于给定的方法,只能定义允许的参数;和(C)如果给定参数只允许某些值,则只允许这些值

(A) 仅使用枚举“方法”相对容易:

对于(B)我认为方法的每个实例都需要有它自己的允许参数枚举,对于(C)一些参数,允许值枚举,有点类似(如果这让任何人感到害怕,我很抱歉):

注意:以下代码不是有效的JAVA代码;这里仅作为概念性示例。

public enum Method {
    getObjectById () {
        enum Parameter {
            objectId;
    },
    getObjectBySearch () {
        enum Parameter {
            query,
            queryType () {
                enum Type { type1, type2 }
            }
        }
    }
}
显然,Java中不允许使用本地枚举,所以这是无法做到的;我想还有更优雅的方式来实现我的最终目标,但我已经五年多没有练习了,所以我正在努力寻找它们

或者可能我想得太多了,试图在我请求的参数和值中实现这种类型安全性是一种非常糟糕的做法(同样,我也不是很有经验)-如果是这样的话,我希望能解释一下为什么这是一种糟糕的做法

谢谢,

-Igor

为什么不将每个方法调用封装在一个服务对象中,以验证其参数

public class Service {
    public SomeObject getObjectById(String objectId) {
        if (isNotValidObjectId(objectId) {
            throw new IllegalArgumentException("objectId is invalid");
        }
        // TODO call the appropriate method
    }

    public SomeObject getObjectBySearch(String query, QueryType queryType) {
        if (isNotValidQuery(query) {
            throw new IllegalArgumentException("query is invalid");
        }
        if (queryType == null) {
            throw new IllegalArgumentException("queryType is mandatory");
        }
        // TODO call the appropriate method
    }
}

为什么不将每个方法调用封装在一个服务对象中,以验证其参数

public class Service {
    public SomeObject getObjectById(String objectId) {
        if (isNotValidObjectId(objectId) {
            throw new IllegalArgumentException("objectId is invalid");
        }
        // TODO call the appropriate method
    }

    public SomeObject getObjectBySearch(String query, QueryType queryType) {
        if (isNotValidQuery(query) {
            throw new IllegalArgumentException("query is invalid");
        }
        if (queryType == null) {
            throw new IllegalArgumentException("queryType is mandatory");
        }
        // TODO call the appropriate method
    }
}

您是否试图约束客户端或服务器端的方法和参数类型?您是否试图约束客户端或服务器端的方法和参数类型?当我看到他对我的评论的回应时,我打算提出类似的建议。我喜欢围绕服务调用构建一组代理类的想法。向上投票。感谢显而易见的解决方案:P我在这个问题上工作太久了,我想我想我想得太多了,从那以后我一直在走错方向;应该休息一下,从另一个角度来解决这个问题。当我看到他对我的评论的反应时,我正试图概括一些不应该被概括的东西。我打算提出类似的建议。我喜欢围绕服务调用构建一组代理类的想法。向上投票。感谢显而易见的解决方案:P我在这个问题上工作太久了,我想我想我想得太多了,从那以后我一直在走错方向;应该休息一下,从另一个角度来解决这个问题。我试图概括一些不应该被概括的东西