【发布时间】:2016-12-14 00:39:12
【问题描述】:
我有一个 Web 服务 (Jersey 2),它返回几个 DOCX 和 PDF 文件。我不知道哪种方法最好:
-
将它们作为 Octet-Stream 返回。这是我在 2 中实现它之前所拥有的:
@GET @Path("solicitudUsuario/plantilla") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response descargarPlantillaSolicitudUsuario() throws ConfigurationException, URISyntaxException, IOException{ File plantillaSolicitudUsuario = this.generalService.getPlantillaSolicitudUsuario(); return Response.ok(plantillaSolicitudUsuario, MediaType.APPLICATION_OCTET_STREAM).header("Content-Disposition", "attachment; filename=\"" + plantillaSolicitudUsuario.getName() + "\"" ).build(); } 在 Json 中包装文件。我使用杰克逊作为 json 提供者。这是我到目前为止所做的:
网络服务:
@GET
@Path("solicitudUsuario/plantilla")
@Produces(MediaType.APPLICATION_JSON)
public Response download() throws ConfigurationException, URISyntaxException, IOException{
File plantillaSolicitudUsuario = this.generalService.getPlantillaSolicitudUsuario();
FicheroDevolver f = FicheroDevolver.buildAsWord(plantillaSolicitudUsuario);
String json = mWriter.writeValueAsString(f);
return Response.ok(MediaType.APPLICATION_JSON_TYPE.withCharset("UTF-8")).entity(json).build();
}
序列化器:
public class FicheroSerializer extends JsonSerializer<FicheroDevolver> {
@Override
public void serialize(com.ingartek.ws.zendesk_bizkaibus.model.FicheroDevolver value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
InputStream fis = FileUtils.openInputStream(value.getFichero());
gen.useDefaultPrettyPrinter();
gen.writeStartObject();
gen.writeFieldName("fichero");
//gen.writeBinary(fis, (int)value.getFicheroLength());
gen.writeRawValue(IOUtils.toString(fis, "UTF-8"));
gen.writeStringField("nombre", value.getNombre());
gen.writeStringField("mimeType", value.getMimeType());
gen.writeEndObject();
fis.close();
}
}
数据包装器:
@JsonSerialize(using = FicheroSerializer.class)
public class FicheroDevolver {
/*
* Atributos
*/
private File fichero;
private String nombre;
private String mimeType;
哪种方法最好?
【问题讨论】:
-
序列化
java.io.File只会序列化文件名。究竟有什么意义? -
@EJP 我不想将路径写为 json 属性,我想要的是发送数据本身。然后,在客户端中,解码并提供服务。你明白我的意思吗?
-
在这种情况下,您的问题标题错误。
java.io.File只代表一个文件名。
标签: java json serialization jersey jackson