gpt4 book ai didi

java - 如何将 @JsonConverter 与 Genson 一起使用?

转载 作者:行者123 更新时间:2023-12-02 10:00:32 27 4
gpt4 key购买 nike

我正在尝试使用 Genson 将具有长 id 的对象序列化为 JSON。

如果我序列化为 JSON 然后返回 Java,效果会很好。但我正在 JavaScript 中进行反序列化。

JavaScript 无法支持完整的 64 位 unsigned int 作为数字(我发现我的 id 的最后几位在 JavaScript 中被清零),因此我需要在序列化期间将 Long id 转换为字符串。

我不想转换对象中的所有长整型,因此我尝试仅对 id 字段使用转换器。

import com.owlike.genson.annotation.JsonConverter;
import javax.persistence.Id;
import lombok.Getter;
import lombok.Setter;

...

/** the local database ID for this order */
@JsonConverter(LongToStringConverter.class)
@Id
@Setter
@Getter
private Long id;

/** The unique ID provided by the client */
@Setter
@Getter
private Long clientKey;

我的转换器代码如下所示:

public class LongToStringConverter implements Converter<Long> {

/** Default no-arg constructor required by Genson */
public LongToStringConverter() {
}

@Override
public Long deserialize(ObjectReader reader, Context ctx) {
return reader.valueAsLong();
}

@Override
public void serialize(Long obj, ObjectWriter writer, Context ctx) {
if (obj != null) {
writer.writeString(obj.toString());
}
}
}

在调用序列化本身时,我没有做任何特殊的事情:

    Genson genson = new GensonBuilder().useIndentation(true).create();
String json = genson.serialize( order );

这行不通。输出仍然如下所示:

{
"clientKey":9923001278,
"id":1040012110000000002
}

我想要实现的是:

{
"clientKey":9923001278,
"id":"1040012110000000002" // value is quoted
}

我也尝试将转换器传递到 GensonBuilder 中,但这会触及对象中的所有 Long,这不是我需要的。

有什么建议吗?

最佳答案

嗯,我不清楚为什么,但看起来 Genson 并没有看到注释。这可能取决于 Hibernate 或 Lombok 的使用。

解决方案似乎是迫使 Genson 考虑带注释的字段。

我使用 GensonBuilder 做到了这一点:

Genson genson = new GensonBuilder().useIndentation(true).include("id").create();
String json = genson.serialize( order );

编辑:结合 Eugen 上面的答案,这也有效,因为它指示 Genson 查看私有(private)字段而不是依赖 getter/setter:

Genson genson2 = new GensonBuilder().useFields(true, VisibilityFilter.PRIVATE).useMethods(true).create();

关于java - 如何将 @JsonConverter 与 Genson 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55666438/

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