Gson注释不适用于我的模型。

问题描述 投票:1回答: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;
}
}
java serialization gson azure-mobile-services
2个回答
5
投票

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

setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)

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


0
投票

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

我遇到了同样的问题。看起来像“声纳”插件引入了一个有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>

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.