2

我正在使用 GSON 将 Java 模型转换为 JSON,以便可以将其存储在 Windows Azure Mobile 上。这是我用注释、getter 和 setter 创建的模型。但是它没有被存储。执行此操作时是否应遵循特殊的命名约定?

public class Alarm
{
@com.google.gson.annotations.SerializedName("id")
private int alarmId;

@com.google.gson.annotations.SerializedName("completed")
private Boolean completed;

@com.google.gson.annotations.SerializedName("time")
private String time;

@com.google.gson.annotations.SerializedName("days")
private int days;

@com.google.gson.annotations.SerializedName("alarm_status")
private String alarmStatus;

@com.google.gson.annotations.SerializedName("alarm_name")
private String alarmName;

@com.google.gson.annotations.SerializedName("milliseconds")
private int milliseconds;

@com.google.gson.annotations.SerializedName("filename")
private String filename;
/*
@com.google.gson.annotations.SerializedName("requester_id")
private String requesterId;

@com.google.gson.annotations.SerializedName("requestee_id")
private String requesteeId;

@com.google.gson.annotations.SerializedName("file_format")
private String fileFormat;

@com.google.gson.annotations.SerializedName("date_set")
private String dateSet;




public Alarm()
{

}

/**
 * Getters and setters
 *
 */
public int getAlarmId() {
    return alarmId;
}

public void setAlarmId(int alarmId) {
    this.alarmId = alarmId;
}

public Boolean getCompleted() {
    return completed;
}

public void setCompleted(Boolean completed) {
    this.completed = completed;
}

public String getTime() {
    return time;
}

public void setTime(String time) {
    this.time = time;
}

public int getDays() {
    return days;
}

public void setDays(int days) {
    this.days = days;
}

public String getStatus() {
    return alarmStatus;
}

public void setStatus(String status) {
    this.alarmStatus= status;
}

public String getName() {
    return alarmName;
}

public void setName(String name) {
    this.alarmName = name;
}

public int getMilliseconds() {
    return milliseconds;
}

public void setMilliseconds(int milliseconds) {
    this.milliseconds = milliseconds;
}

public String getFilename() {
    return filename;
}

public void setFilename(String filename) {
    this.filename = filename;
}

public String getRequesterId() {
    return requesterId;
}

public void setRequesterId(String requesterId) {
    this.requesterId = requesterId;
}

public String getDateSet() {
    return dateSet;
}

public void setDateSet(String dateSet) {
    this.dateSet = dateSet;
}

public String getRequesteeId() {
    return requesteeId;
}

public void setRequesteeId(String requesteeId) {
    this.requesteeId = requesteeId;
}

public String getFileFormat() {
    return fileFormat;
}

public void setFileFormat(String fileFormat) {
    this.fileFormat = fileFormat;
}




@Override
public boolean equals(Object o) {
    return o instanceof Alarm && ((Alarm) o).alarmId == alarmId;
}
}
4

3 回答 3

6

如果错误仍然存​​在,只需将此函数附加到您的 GSONBuilder。

setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)

这样 GSON 就可以自动生成名称。使用此功能后,您可以删除存在的注释。

于 2013-08-31T22:38:49.770 回答
0

如果您使用的是 OSGi/Eclipse,请确保已导入所有 GSON 包。

我在一个 OSGi 项目中遇到了这个问题,结果发现并非所有 GSON 包都已导入到与我的模型对象一起导出 jar 的包中(GSON 来自单独的包)。这导致 GSON 处理模型对象,就好像它们没有注释并且不抛出任何异常一样。

于 2019-07-15T21:36:48.250 回答
0

我知道这已经有一段时间了,但回答它以防万一它帮助别人:

我遇到了同样的问题。看起来像“声纳”插件引入了一个有错误的 Gson 实现。因此,请确保您使用“com.google.gson”包中的 google Gson。检查您的导入语句或使用 FQN:

com.google.Gson gson = new GsonBuilder().create();

用于 google 实现的 maven 依赖项(截至 2019 年 1 月):

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>
于 2019-02-17T19:24:02.750 回答