gpt4 book ai didi

java - Jackson ObjectMapper 将 "long"java 类型视为 "number"而不是 "integer"

转载 作者:太空宇宙 更新时间:2023-11-04 14:14:25 29 4
gpt4 key购买 nike

使用org.codehaus.jackson.map.ObjectMapper(不是数据绑定(bind)版本!)我从以下对象生成一个json架构:

public class MyModelObject {    
private long fileSize;
//... other properties, getters, setters etc
}

使用以下代码:

ObjectMapper mapper = new ObjectMapper();
JsonSchema schema = mapper.generateJsonSchema(clazz);
String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema);

我得到以下架构(精简到相关部分):

{
"type" : "object",
"properties" : {
"fileSize" : {
"type" : "number"
}
}
}

“number”不是 long 的最佳表示,因为当我在其他地方尝试从模式生成 pojo 时,我得到的是“double”而不是“long”(甚至“int”也可以)。

据此,json中有一种“整数”数据类型更适合我的需求: http://spacetelescope.github.io/understanding-json-schema/reference/numeric.html

但是深入研究 jackson-mapper 模块的源代码,我发现他们正在使用此类中包含的名为 LongSerializer 的标准序列化器:org.codehaus.jackson.map .ser.StdSerializers

相关部分是这个方法:

@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint)
{
return createSchemaNode("number", true);
}

长话短说:是否可以覆盖标准序列化器,或者我是否需要进入并破解我生成的输出?

最佳答案

您似乎使用的是旧版本的 Jackson。建议您首先尝试 Jackson2,最新版本在这里:https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.5.0

看起来较新的 json 模式模块可能对整数做正确的事情:https://github.com/FasterXML/jackson-module-jsonSchema/blob/master/src/main/java/com/fasterxml/jackson/module/jsonSchema/types/IntegerSchema.java

关于java - Jackson ObjectMapper 将 "long"java 类型视为 "number"而不是 "integer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27929514/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com