使用guava-datatype从Spring服务中使用GWTP-Rest + jackson-guava反序列化番石榴类型

时间:2014-08-19 12:29:40

标签: java json jackson deserialization gwtp

我使用GWTP-Rest,我需要反序列化包含ListMultimap的dto。 dto的所有元素都是反序列化的,但不是ListMultimap。低于dto的代码。 JsonAnnotation正在工作,来自正确的artifactId,它与gwt-jackson兼容。我用maven gwt-guava-jackson导入并继承了模块。

公共类GetdtoMobileResult实现ExpirableResult,DtoData {

@JsonProperty("diffusions")
private ListMultimap<Integer, Diffusion> diffusions;

private TimeInterval visibleRange;

@JsonProperty("ttl")
private long ttl;

private dtoHourRange hourRange;

GetTVGuideMobileResult() {
    super();
}

public GetTVGuideMobileResult(
        final ArrayListMultimap<Integer, Diffusion> diffusions,
        final TimeInterval visibleRange, final long ttl, final MediamatHourRange range) {
    super();
    this.diffusions = diffusions;
    this.visibleRange = visibleRange;
    this.ttl = ttl;
    this.hourRange = range;
}

@JsonIgnore
@Override
public ListMultimap<ChannelId, Diffusion> getDiffusions() {
    return ArrayListMultimap.create();
}

@JsonProperty("diffusions")
public ListMultimap<Integer, Diffusion> getdiffusions()
{
    return diffusions;
}

@Override
public TimeInterval getVisibleRange() {
    return visibleRange;
}

@JsonProperty("ttl")
@Override
public long ttl() {

    return ttl;
}

@Override
public dtoHourRange getHourRange() {
    return hourRange;
}

// #### setter add to able deserialization on client side mobile. ######
@JsonProperty("diffusions")
public void setDiffusions(final ListMultimap<Integer, Diffusion> diffusions) {
    this.diffusions = diffusions;
}

public void setHourRange(final dtoHourRange hourRange) {
    this.hourRange = hourRange;
}

@JsonProperty("ttl")
public void setTtl(final long ttl) {
    this.ttl = ttl;
}

public void setVisibleRange(final TimeInterval visibleRange) {
    this.visibleRange = visibleRange;
}

}

我从服务器{“diffusions”收到正确的对象:{“...”},...}。序列化是由lib jackson-datatype-guava完成的,如果我正确理解它是由jackson-guava使用的话。实现的接口定义了对象的getter,并实现了Serializable。

我有另外一个问题,可能与他有关,我的ListMultimap使用normaly和dto作为包装整数的键,但是jackson告诉我,我的dto不支持作为map的键。我的代码:

公共类DtoId实现了Serializable {

/**
 * serial version Uid
 */
private static final long serialVersionUID = -5816632906385308130L;

private int id;

DtoId() {
    // for serialization
}

public DtoId(final int id) {
    super();
    this.id = id;
}

public int getId() {
    return id;
}

public void setId(final int id) {
    this.id = id;
}

@Override
public String toString() {
    return Integer.toString(id);
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + id;
    return result;
}

@Override
public boolean equals(final Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    ChannelId other = (ChannelId) obj;
    if (id != other.id) {
        return false;
    }
    return true;
}

}

1 个答案:

答案 0 :(得分:0)

好的,问题来自番石榴项目之间的不良依赖关系。我向客户提供了相同版本的番石榴,共享和服务器,现在序列化工作,对不好的问题抱歉。

继续发生第二个错误,我将在另一个页面上发布。