0

我有 Jaskcon 的简单序列化程序

public class NullSerializer extends JsonSerializer<Object> {

    public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        jgen.writeString("");
    }
}

编译此代码后,Java 抛出错误

Error:java: java.lang.StackOverflowError

我正在使用这个依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.1</version>
</dependency>

有任何想法吗 ?

4

1 回答 1

1

对我来说效果很好:

public class Main {
  static class NullSerializer extends JsonSerializer<Object> {

    public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        jgen.writeString("");
    }
  }

  public static void main(String[] args) throws Exception {
    ObjectMapper m = new ObjectMapper();
    SimpleModule module = new SimpleModule();
    module.addSerializer(Object.class, new NullSerializer());
    m.registerModule(module);
    System.out.println(m.writeValueAsString(
        Arrays.asList(true, 1, "String", new HashMap())
    )); //prints "", while without registerModule - [true,1,"String",{}]
  }
}

我会去别的地方看看。

一方面,检查你的 Xss for Maven。应该至少-Xss256k,也许您需要更多,甚至更好,将其默认设置为 1MB,因为编译器使用堆栈的方式与 Java 不同,并且有时会将结构放在堆栈上。

我希望您没有使用 GWT,因为如果您的代码暴露给 GWT 编译器,这将是这种情况下的典型响应。

最不可能的事件是您在编译器中发现了真正的错误。

尝试使用--debugMaven 选项,也许它会显示更多信息。

于 2017-08-03T02:53:54.613 回答