有没有办法让杰克逊序列化一些流对象(并在之后关闭)?像这样:
class TextFile{
String fileName;
StringReader content;
//ByteArrayInputStream content;
}
更新
澄清:我想要流式传输内容,而不只是将其序列化为单个String对象。
答案 0 :(得分:1)
实施自定义JsonSerializer
:
public class StreamSerializer extends JsonSerializer<ByteArrayInputStream> {
@Override
public void serialize(ByteArrayInputStream content,
JsonGenerator jsonGenerator,
SerializerProvider serializerProvider)
throws IOException, JsonProcessingException {
jsonGenerator.writeBinary(content, -1);
}
并像这样使用它:
public class TextFile {
String fileName;
@JsonSerialize(using=StreamSerializer.class, as=byte[].class)
ByteArrayInputStream content;
}
答案 1 :(得分:0)
您的问题类似于:Jackson JSON custom serialization for certain fields
期望的行为是什么?您是否希望将流序列化为字符串,二进制内容,解析和序列化为对象等。
假设您希望将数据序列化为字符串,您可以使用注释告诉Jackson如何序列化它:
public class TextFile {
String fileName;
@JsonSerialize(using=ReaderToStringSerializer.class, as=String.class)
StringReader content;
}
public class ReaderToStringSerializer extends JsonSerializer<Reader> {
@Override
public void serialize(Reader contents,
JsonGenerator jsonGenerator,
SerializerProvider serializerProvider)
throws IOException, JsonProcessingException {
StringBuilder buffer = new StringBuilder();
char[] array = new char[8096];
int len = 0;
while (-1 != (len = contents.read(array))) {
buffer.append(array,0,len);
}
contents.close();
jsonGenerator.writeString(buffer.toString());
}
输出类似于:
{
"fileName": "foo.bar",
"content": "the quick brown fox..."
}