我想将自定义对象传递给bolt,此自定义对象的功能是获取各种bean。但是启动程序时出现错误。
错误是“拓扑conf无法json序列化”。
如何序列化自定义对象,可以给我一些代码,谢谢!
答案 0 :(得分:1)
Storm使用https://github.com/fangyidong/json-simple序列化为JSON。您需要确保使用此库将放入拓扑conf中的所有内容序列化为JSON。
该库确实有一种通过实现https://github.com/fangyidong/json-simple/blob/master/src/main/java/org/json/simple/JSONAware.java使类可序列化的JSON的方法,但是我看不到一种转换回Java对象的好方法。
最简单的解决方案可能是先使用某个库将对象转换为String或Map,然后再将其放入拓扑配置中,然后使用同一库将其转换回螺栓中的Object。我可以推荐https://github.com/FasterXML/jackson。这是使用该库进行序列化的简单示例
private static class Demo {
private final int prop;
public Demo(@JsonProperty("prop") int prop) {
this.prop = prop;
}
public int getProp() {
return prop;
}
}
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String serialized = mapper.writeValueAsString(new Demo(10));
Demo deserialized = mapper.readValue(serialized, Demo.class);
}