从请求中缺少必填字段时出现更好的错误消息

时间:2014-08-12 08:13:57

标签: google-app-engine google-cloud-endpoints protorpc

当缺少必填字段时,ProtoRPC会返回如下消息:

{
 "error": {
  "code": 400, 
  "errors": [
   {
    "domain": "global", 
    "message": "Error parsing ProtoRPC request (Unable to parse request content: Message CombinedContainer is missing required field api_key)", 
    "reason": "badRequest"
   }
  ], 
  "message": "Error parsing ProtoRPC request (Unable to parse request content: Message CombinedContainer is missing required field api_key)"
 }
}

是否可以提供更好的错误消息?理想情况下,在此示例中“缺少必填字段api_key”。

根据Google Code Issue TrackerGithub issues,这曾经被处理过。但是,似乎没有任何活动。

我非常感谢任何解决方案或解决方法。

1 个答案:

答案 0 :(得分:0)

截至今天,ProtoRPC仍然返回相同的未提取错误,这使得人们更难以返回自定义错误响应。

一个简单的解决方法是使Message字段可选,并在端点处理程序/方法中的某处强制执行需求约束。

所以而不是;

class Request(Message):
    name = StringField(1, required=True)

设置'名称'作为可选,

class Request(Message):
    name = StringField(1)
然后,可以通过简单的if语句在端点处理程序方法中强制执行需求约束,或者通过将这些字段映射到需要这些字段的数据存储区实体,从而允许异常处理BadValueError并返回更自定义的错误响应。

示例:

try:
    account = Account(name=request.name)
    account.put()
except BadValueError:
    return Response(status=False, message='Missing field "name"')