【发布时间】:2014-04-06 03:24:24
【问题描述】:
我有一个包含 id 的简单对象。我正在寻找一种将其用作哈希图中的键的方法。
Jersey 在我的 web.xml 中注册为 servlet
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.ambientlight.RestConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
杰克逊在这里注册。
public class RestConfig extends ResourceConfig {
public RestConfig() {
packages("org.ambientlight.webservice");
register(JacksonFeatures.class);
}
}
这是我的关键对象:
@JsonSerialize(using = SwitchableIdSerializer.class)
public class SwitchableId {
public String id;
public SwitchType type;
public SwitchableId(String id, SwitchType type) {
super();
this.id = id;
this.type = type;
}
}
这是我的序列化器
public class SwitchableIdSerializer extends JsonSerializer<SwitchableId> {
@Override
public void serialize(SwitchableId data, JsonGenerator json, SerializerProvider provider) throws IOException,
JsonGenerationException {
json.writeString(data.id + "|" + data.type);
}
}
如果我直接返回 SwitchableId,一切都会像方面一样工作。但如果我返回一个带有 hasmap 的结构,则不使用序列化程序,只应用简单的 SwitchableId.toString()。
那里有很多例子。对于较旧的版本,或者如果杰克逊是独立使用的。但我找不到任何提示如何处理球衣 servlet。请帮忙!
我试图注释包含的类:
public class PowerstateHandlerConfiguration extends AbstractActionHandlerConfiguration {
@JsonSerialize(keyUsing = SwitchableIdSerializer.class)
public Map<SwitchableId, Boolean> powerStateConfiguration = new HashMap<SwitchableId, Boolean>();
}
但没有成功。缺少什么?
【问题讨论】:
标签: java json rest servlets jackson