我有一個簡單的對象包含一個id。我正在尋找一種將它用作hashmap中的關鍵字的方法。球衣2.6傑克遜2.3和地圖中的複雜鍵
球衣在我的web.xml
<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>
傑克遜在這裏登記註冊爲一個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一切就像aspeceted。但是如果我用hasmap返回一個結構體,那麼序列化程序不會被使用,只是簡單的SwitchableId.toString()被應用。
這裏有很多例子。對於舊版本或者傑克遜單獨使用。但是我找不到任何提示如何在球衣servlet中處理。請幫忙!
我試圖註釋包含類:
public class PowerstateHandlerConfiguration extends AbstractActionHandlerConfiguration {
@JsonSerialize(keyUsing = SwitchableIdSerializer.class)
public Map<SwitchableId, Boolean> powerStateConfiguration = new HashMap<SwitchableId, Boolean>();
}
但沒有成功。什麼不見了?
我試圖註釋包含class.but沒有成功。如果我調試我的tomcat 7,序列化程序不會被調用。有沒有配置丟失? – furefix
註解的類必須是'Map',所以通常你會註解屬性(使用Map值)而不是類。 – StaxMan
對那個愚蠢的問題感到抱歉。但你可以發表一個簡單的例子。我不知道我是否理解你的權利 – furefix