Rest 使用枚举限制允许的httpMethods

Rest 使用枚举限制允许的httpMethods,rest,groovy,enums,Rest,Groovy,Enums,我正在为RESTAPI方法创建连接器。某些方法具有相同的方法名称,但执行不同的HTTP方法 例如,createEntity(HttpMethod HttpMethod,createEntity模型)只能执行POST和GET。我想要的是当随PUT或DELETE一起提供httpMethod时出现错误。允许的httpMethod将取决于每个方法。如何在CreateEntity.groovy中执行此验证 下面是HttpMethod.groovy public enum HttpMethod { PO

我正在为RESTAPI方法创建连接器。某些方法具有相同的方法名称,但执行不同的HTTP方法

例如,
createEntity(HttpMethod HttpMethod,createEntity模型)
只能执行POST和GET。我想要的是当随PUT或DELETE一起提供
httpMethod
时出现错误。允许的
httpMethod
将取决于每个方法。如何在
CreateEntity.groovy
中执行此验证

下面是HttpMethod.groovy

public enum HttpMethod {
  POST,
  DELETE,
  GET,
  PUT,
  HEAD,
  TRACE,
  CONNECT,
  PATCH
}
def createEntityQuery ( HttpMethod httpMethod, CreateEntityQuery model ) {
   //perform operations
}
CreateEntity.groovy

private String field1;
private String field2;
//write here that only POST and GET are allowed
连接器。groovy

public enum HttpMethod {
  POST,
  DELETE,
  GET,
  PUT,
  HEAD,
  TRACE,
  CONNECT,
  PATCH
}
def createEntityQuery ( HttpMethod httpMethod, CreateEntityQuery model ) {
   //perform operations
}
这必须是有效的:

createEntity( HttpMethod.POST, new EntityQuery([ field1 : "field1", field2 : "field2" ]))
createEntity( HttpMethod.GET, new EntityQuery([ field1 : "field1", field2 : "field2" ]))
这将引发一个错误:

createEntity( HttpMethod.PUT, new EntityQuery([ field1 : "field1", field2 : "field2" ]))
createEntity( HttpMethod.DELETE, new EntityQuery([ field1 : "field1", field2 : "field2" ]))

这就是你想要的吗:

public enum HttpMethod {
  POST,
  DELETE,
  GET,
  PUT,
  HEAD,
  TRACE,
  CONNECT,
  PATCH
}

class EntityQuery {
    String field1
    String field2
}

def createEntity(HttpMethod h, EntityQuery q) {
    if(!(h in [HttpMethod.POST, HttpMethod.GET])) {
      throw new Exception('Only POST and GET methods allowed')
    }
}

createEntity(HttpMethod.PUT, new EntityQuery())
?


但是,最好公开公共方法,如
createPostEntity
createGetEntity
,它们将只接受
EntityQuery
作为参数,并且
HttpMethod
将在内部处理。

这就是您要寻找的:

public enum HttpMethod {
  POST,
  DELETE,
  GET,
  PUT,
  HEAD,
  TRACE,
  CONNECT,
  PATCH
}

class EntityQuery {
    String field1
    String field2
}

def createEntity(HttpMethod h, EntityQuery q) {
    if(!(h in [HttpMethod.POST, HttpMethod.GET])) {
      throw new Exception('Only POST and GET methods allowed')
    }
}

createEntity(HttpMethod.PUT, new EntityQuery())
?


但是最好公开公共方法,如
createPostEntity
createGetEntity
,它们将只接受
EntityQuery
作为参数,并且
HttpMethod
将在内部处理。

逻辑上是,嗯,如果我有类似配置类的东西,我会把40个api方法放在那里,告诉它们每个方法都支持哪些HTTP方法,我认为这会更整洁。目前,你有8个api方法,这个数字增加的可能性很低;)然而,拥有40个具有共同逻辑的方法并不是一个好主意。似乎您需要的是使用一个构建器或工厂模式。你能详细说明一下你想要达到的目标吗?拥有许多方法将使每个方法中的登录更简单、更易于使用和测试。@fireflieslive同意,这样的类可能会更好。实现这样的类有什么问题吗?有什么特别的问题吗?嗯,是的,我认为把它作为createEntityPost公开,createEntityGet要好得多。我用一个方法来表示几个http方法的原因是,我已经看到get实现和post实现只有body和query作为字段的区别。那么,如果它们支持其他http方法,它们的结构与post和get不同呢。所以是的,我会照你说的把它暴露出来。谢谢逻辑上是的,嗯,我认为如果我有类似配置类的东西,我会把40个api方法放在那里,告诉它们每个方法支持什么HTTP方法?目前,你有8个api方法,这个数字增加的可能性很低;)然而,拥有40个具有共同逻辑的方法并不是一个好主意。似乎您需要的是使用一个构建器或工厂模式。你能详细说明一下你想要达到的目标吗?拥有许多方法将使每个方法中的登录更简单、更易于使用和测试。@fireflieslive同意,这样的类可能会更好。实现这样的类有什么问题吗?有什么特别的问题吗?嗯,是的,我认为把它作为createEntityPost公开,createEntityGet要好得多。我用一个方法来表示几个http方法的原因是,我已经看到get实现和post实现只有body和query作为字段的区别。那么,如果它们支持其他http方法,它们的结构与post和get不同呢。所以是的,我会照你说的把它暴露出来。谢谢