拓扑conf无法json序列化-Storm

时间:2018-07-31 12:05:03

标签: apache-storm

我想将自定义对象传递给bolt,此自定义对象的功能是获取各种bean。但是启动程序时出现错误。

  

错误是“拓扑conf无法json序列化”。

如何序列化自定义对象,可以给我一些代码,谢谢!

1 个答案:

答案 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);
}