gpt4 book ai didi

java - 云端点不尊重 Jackson 注释

转载 作者:行者123 更新时间:2023-12-01 11:32:52 25 4
gpt4 key购买 nike

我有一个组织类,其中有几个日期字段,如下所示。

public class Organization {

private String _id;

private String name;

@JsonDeserialize(using=JsonDateDeserializer.class)
@JsonSerialize(using=JsonDateSerializer.class)
private Date createdTime;

// getters and setters

}

为了在客户端以简单的方式处理日期,我将 date 转换为 long 并使用这些 JsonSerializer 将其发送到客户端,如下所示

public class JsonDateSerializer extends JsonSerializer<Date>{

@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) throws IOException, JsonProcessingException {
gen.writeNumber(date.getTime());
}

}

我有一个端点,它将执行获取组织并将结果插入到响应映射中,如下所示。

@ApiMethod(name="organization.get", path="organizations/{organizationId}", httpMethod=HttpMethod.GET)
public Map<String, Object> organizationDetails(@Named("organizationId") String organizationId){
Organization org = DB.getOrganization("123");
Map<String, Object> response = new HashMap<String, Object>();
response.put("status", HttpServletResponse.SC_OK);
response.put("success", true);
response.put("entity", org);
return response;
}

但是我在客户端看到的最终结果 JSON 是

{
"status" : 200,
"entity" : [ {
"_id" : "966a03b3-8e46-41ee-b330-6533409b2b4a",
"name" : "POKURI",
"createdTime" : "2015-05-16T15:02:31.499+05:30"
} ],
"success" : true
}

这里的日期以某种格式出现,而不是很长。如果我使用 Jackson ObjectMapper 转换相同的内容而不使用云端点,我将以预期的方式获得响应。为什么云端点不尊重 Jackson 注释?有没有办法配置它?

注意:即使我观察到,如果您使用云端点,long也会在客户端以字符串形式出现。我正在使用 appengine SDK 1.9.19

最佳答案

您不应该将 Jackson 注释与 Endpoints 一起使用(如果您这样做,您必须使用重新打包的版本,而不是您自己的版本)。你可以用 @ApiResourceProperty 做你想做的事或@ApiTransformer ,取决于您想如何做。参见注释文档here .

关于long ,由于浮点不精确,它被序列化为字符串——不可能使用 double 精确地表示 long 的所有值,而 JavaScript 和 JSON.parse 正是如此。将存储一个数字,因此它始终作为字符串传输。我们的任何端点客户端库都会自动将它们转换为正确的数据类型。

关于java - 云端点不尊重 Jackson 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30275839/

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