from pydantic import BaseModel, StrictInt, constr, validator
class Person(BaseModel):
person_id: StrictInt
person_name: constr(strip_whitespace=True, strict=True)
@validator('person_id')
def person_id_validator(cls, val):
assert val is not None
return val
@validator('person_name')
def person_name_validator(cls, val):
assert val != ''
return val
当使用FastAPI().openapi()
为此类生成API-SPEC时,变量的类型始终是
person_id
,因此,从该规范生成的Java客户端始终具有包装器类
integer
对于变量
Integer
。但是,
personId
可能是一个很长的数字(> 5,000,000,000),我不能保留在
personId
中。 pyddantic本身没有内置。 Python内部处理INT32和INT64,因此我无法控制这一点。我尝试在
Integer
中使用
Long
和numpy.int64
使用
torch.long
和
arbitrary_types_allowed
,但这总是在运行时失败。
class Config
.
我如何实现?
在Openapi中,长整数定义为:
ValueError: Value not declarable with JSON Schema, field: name='person_id' type=int64 required=True
type: integer
format: int64
。使用FastApi/Pydantic时,您可以添加
format
属性如下:
format
background从本质上讲,您无需指定长INT(或INT64),因为转换是自动完成的。
但是,如果与我一样,API被另一种语言(例如C#)使用,并且该语言将
person_id: StrictInt = Field(..., format='int64')
integer
int32
以防止未来问题。
宣扬 在Fastapi中,API规格和模式是由swaggerOpenapi
.。 如您所见,
openapiInteger可能具有
int64
,format
整数格式应在int32
对象中指定。
这是:int64
将工作起作用,但它不受衬里的认可,也无法适用于列表:Field
.。 根据
PydanticDocument,正确做到这一点的方法是使用
person_id: StrictInt = Field(format='int64')
属性。
list[StrictInt]