该文档在https://developers.google.com/appengine/docs/python/endpoints/exceptions中提到了“子类化 endpoints.ServiceException” 。然而,子类不能真正表达字符串消息、“状态”和 http 代码之外的任何内容。
对于任何具有更智能的异常处理的应用程序,错误需要携带的不仅仅是这个。
如何子类化异常类,提供自定义消息/状态?
该文档在https://developers.google.com/appengine/docs/python/endpoints/exceptions中提到了“子类化 endpoints.ServiceException” 。然而,子类不能真正表达字符串消息、“状态”和 http 代码之外的任何内容。
对于任何具有更智能的异常处理的应用程序,错误需要携带的不仅仅是这个。
如何子类化异常类,提供自定义消息/状态?
目前还没有办法扩展payload,但是可以自定义状态码。
正如endpoints.api_exceptions对400错误所做的那样:
import httplib
class BadRequestException(ServiceException):
"""Bad request exception that is mapped to a 400 response."""
http_status = httplib.BAD_REQUEST
当前支持的错误状态代码列表(截至 2013 年 5 月 8 日)是:
httplib.BAD_REQUEST: 400httplib.UNAUTHORIZED: 401httplib.FORBIDDEN: 403httplib.NOT_FOUND: 404httplib.CONFLICT: 409httplib.GONE: 410httplib.PRECONDITION_FAILED: 412httplib.REQUEST_ENTITY_TOO_LARGE: 413这些状态代码将映射到其他代码:
httplib.PAYMENT_REQUIRED: 402 映射到 404httplib.METHOD_NOT_ALLOWED: 405 映射到 501httplib.NOT_ACCEPTABLE: 406 映射到 404httplib.PROXY_AUTHENTICATION_REQUIRED: 407 映射到 404httplib.REQUEST_TIMEOUT: 408 映射到 503httplib.LENGTH_REQUIRED: 411 映射到 404httplib.REQUEST_URI_TOO_LONG: 414 映射到 404httplib.UNSUPPORTED_MEDIA_TYPE: 415 映射到 404httplib.REQUESTED_RANGE_NOT_SATISFIABLE: 416 映射到 404httplib.EXPECTATION_FAILED: 417 映射到 404此外,如果您的响应是一个message_types.VoidMessage对象,您将能够发送204无内容响应 ( httplib.NO_CONTENT)。