下面是一个工作代码示例。在我的情况下,测试打印.{"newString":"foobar","myInt":1,"myString":"asdf"}
import com.fasterxml.jackson.annotation.JsonProperty;
public abstract class BaseEvent {
@JsonProperty("myInt")
public abstract int myInt();
@JsonProperty("myString")
public abstract String myString();
public static abstract class Builder <B extends Builder<B>> {
@JsonProperty("myInt")
public abstract B myInt(int myInt);
@JsonProperty("myString")
public abstract B myString(String myString);
}
}
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.auto.value.AutoValue;
@AutoValue
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(as = ConcreteEvent.class)
@JsonDeserialize(builder = ConcreteEvent.Builder.class)
public abstract class ConcreteEvent extends BaseEvent {
public static Builder builder() {
return Builder.builder();
}
@JsonProperty("newString")
public abstract String newString();
@AutoValue.Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public static abstract class Builder extends BaseEvent.Builder<Builder> {
@JsonCreator
public static Builder builder() {
return new AutoValue_ConcreteEvent.Builder();
}
@JsonProperty("newString")
public abstract Builder newString(String newString);
public abstract ConcreteEvent build();
}
}
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import org.junit.Assert;
import org.junit.Test;
public class ConcreteEventTest {
@Test
public void concreteEventTest() throws IOException {
ConcreteEvent e = ConcreteEvent.builder().myInt(1).myString("asdf").newString("foobar").build();
ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(e);
ConcreteEvent newEvent = mapper.readValue(jsonStr, ConcreteEvent.class);
System.out.println(jsonStr);
Assert.assertEquals(newEvent, e);
}
}