无法使用 guava-datatype 从 Spring 服务中使用 GWTP-Rest + jackson-guava 反序列化 guava 类型
Posted
技术标签:
【中文标题】无法使用 guava-datatype 从 Spring 服务中使用 GWTP-Rest + jackson-guava 反序列化 guava 类型【英文标题】:can't deserialize guava type with GWTP-Rest + jackson-guava from Spring service using guava-datatype 【发布时间】:2014-08-19 12:29:39 【问题描述】:我使用 GWTP-Rest,我需要反序列化一个包含 ListMultimap 的 dto。 dto 的所有元素都是反序列化的,但不是 ListMultimap。在dto的代码下方。 JsonAnnotation 正在工作并且来自与 gwt-jackson 兼容的正确 artifactId。我使用 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 使用正常的 dto 作为包装整数的键,但杰克逊告诉我不支持我的 dto 作为地图的键。我的 dto 代码:
公共类 DtoId 实现可序列化
/**
* 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】:好的,问题来自项目对番石榴的不良依赖性。我向客户端、共享和服务器提供了相同版本的番石榴,现在序列化工作了,抱歉这个问题。
第二个错误继续出现,我将在另一个页面上发布。
【讨论】:
以上是关于无法使用 guava-datatype 从 Spring 服务中使用 GWTP-Rest + jackson-guava 反序列化 guava 类型的主要内容,如果未能解决你的问题,请参考以下文章
使用Spire组件抛出异常The type initializer for 'spr857' threw an exception