我使用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;
}
}
如果错误仍然存在,只需将此函数附加到您的GSONBuilder即可。
setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
这样GSON就可以自动生成名称。使用此功能后,您可以删除存在的注释。
我知道它已经有一段时间但是回答它以防万一它能帮助别人:
我遇到了同样的问题。看起来像“声纳”插件引入了一个有bug的Gson实现。因此,请确保在“com.google.gson”包中使用google Gson。检查您的import语句或使用FQN:
com.google.Gson gson = new GsonBuilder().create();
谷歌实施的maven依赖(截至2019年1月):
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
如果您使用OSGi / Eclipse,请确保导入所有GSON包。
我在OSGi项目中遇到了这个问题,结果发现并非所有的GSON包都被导入到使用我的模型对象导出jar的包中(GSON来自一个单独的包)。这导致GSON处理模型对象,好像它们没有注释而不抛出任何异常。