我正在尝试在 API 中获取 JSON 响应中的 LocalDateTime 。
用于序列化/反序列化,使用Google的Gson库
下面是代码... 对象模型如下....
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import com.google.gson.annotations.Expose;
public class AddTenResponseData {
@Expose Object id;
@Expose OffsetDateTime timestamp;
public AddTennatResponseData (Object id, OffsetDateTime timestamp) {
this.id = id;
this.timestamp = timestamp;
}
<<getter setters >>
}
API代码如下
@GetMapping("/ten/add")
@ResponseBody
public String addTenant() throws Exception {
<<all other code>>
Gson gson = new GsonBuilder().setPrettyPrinting()
.excludeFieldsWithoutExposeAnnotation()
.create();
AddTenResponseData res = new AddTenResponseData (generatedString, OffsetDateTime.now());
str = gson.toJson(res);
return str;
}
回复是这样的
{
"id": "weHhAQQqxG",
"timestamp": {}
}
现在的问题是, str 只包含 generatedString 变量的值,但不包含 timestamp 中的本地日期时间值,不知道为什么。
请推荐
我认为问题与您的
OffsetDateTime
类中 AddTenResponseData
字段的序列化有关。
默认情况下,Gson 没有内置对
OffsetDateTime
的支持。
您需要为
serializer
类型提供自定义 deserializer
和 OffsetDateTime
。
我添加了示例代码,您可以修改代码来处理
OffsetDateTime
序列化和反序列化:
首先,为 OffsetDateTime 添加自定义序列化器和反序列化器:
import java.lang.reflect.Type;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import com.google.gson.*;
public class OffsetDateTimeSerializer implements JsonSerializer<OffsetDateTime>, JsonDeserializer<OffsetDateTime> {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
@Override
public JsonElement serialize(OffsetDateTime src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(FORMATTER.format(src));
}
@Override
public OffsetDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
return OffsetDateTime.parse(json.getAsString(), FORMATTER);
}
}
其次,在创建Gson实例时注册自定义序列化器和反序列化器:
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.excludeFieldsWithoutExposeAnnotation()
.registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeSerializer())
.create();
我认为通过这些更改,Gson 将使用您自定义的
serializer
和 deserializer
来表示 OffsetDateTime
,确保它在 JSON 响应中正确序列化和反序列化。