【发布时间】:2015-02-26 19:33:47
【问题描述】:
拥有可以在 dropwizard 外部注册的自定义(反)序列化程序的好方法是什么?
我在(反)序列化复合对象时遇到问题。我尝试使用@JsonUnwrapped 来获取我想要的 JSON,但是在反序列化时遇到了问题 - 它需要特殊的构造函数来获取字符串,并且需要复合对象了解构造封装对象的知识。另外,我想要一种不必在我的值对象上使用 Jackson 注释的方法。
例如,我有:
public class SubmissionModule extends SimpleModule {
public SubmissionModule() {
addDeserializer(SubmissionDetails.class, new SubmissionDeserializer());
addSerializer(SubmissionDetails.class, new SubmissionSerializer());
}
public class SubmissionSerializer extends JsonSerializer<SubmissionDetails> {
@Override
public void serialize(SubmissionDetails value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeStringField("id", "" + value.getId());
jgen.writeStringField("title", value.getTitle());
jgen.writeStringField("abstract", value.getAbstract());
jgen.writeEndObject();
}
}
public class SubmissionDeserializer extends JsonDeserializer<SubmissionDetails> {
@Override
public SubmissionDetails deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
return aSubmissionWithId(SubmissionId.from(node.get("id").asText()))
.title(node.get("title").asText())
.abstract_(node.get("abstract").asText()).create();
}
}
}
我在 DropWizard 中注册的内容如下:
bootstrap.getObjectMapper().registerModule(new SubmissionModule());
但我不知道是否可以向 Jersey 客户端(或使用 ResourceTestRule 时可用的客户端)注册(反)序列化程序。
有什么想法吗?
【问题讨论】:
标签: jersey jackson dropwizard jersey-client