У меня есть служба java rest, которая должна возвращать PDF.
Это мой код:
@RequestMapping(value = "/pdf", method = RequestMethod.GET)
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public javax.ws.rs.core.Response getPdf() throws Exception {
File file = new File("xxx");
javax.ws.rs.core.Response.ResponseBuilder response = javax.ws.rs.core.Response.ok((Object) file);
response.header("Content-Disposition", "attachment;filename=" + file);
return response.build();
}
Но результат всегда json вместо файла для скачать или открыть. Почему?
{
"context": {
"headers": {
"Content-Type": [
{
"type": "application",
"subtype": "octet-stream",
"parameters": {},
"wildcardType": false,
"wildcardSubtype": false
}
],
"Content-Disposition": [
"attachment; filename=\"12-20200313.pdf\""
]
},
"configuration": null,
"entity": "e:\\content\\12-20200313.pdf",
"entityType": "java.io.File",
"entityAnnotations": [],
"entityStream": {
"closed": false,
"committed": false
},
"length": -1,
"location": null,
"language": null,
"lastModified": null,
"date": null,
"acceptableMediaTypes": [
{
"type": "*",
"subtype": "*",
"parameters": {},
"quality": 1000,
"wildcardType": true,
"wildcardSubtype": true
}
],
"acceptableLanguages": [
"*"
],
"committed": false,
"lengthLong": -1,
"mediaType": {
"type": "application",
"subtype": "octet-stream",
"parameters": {},
"wildcardType": false,
"wildcardSubtype": false
},
"allowedMethods": [],
"requestCookies": {},
"entityClass": "java.io.File",
"responseCookies": {},
"entityTag": null,
"links": [],
"stringHeaders": {
"Content-Type": [
"application/octet-stream"
],
"Content-Disposition": [
"attachment; filename=\"12-20200313.pdf\""
]
}
},
"status": 200,
"length": -1,
"location": null,
"language": null,
"lastModified": null,
"date": null,
"entity": "e:\\content\\12-20200313.pdf",
"cookies": {},
"mediaType": {
"type": "application",
"subtype": "octet-stream",
"parameters": {},
"wildcardType": false,
"wildcardSubtype": false
},
"allowedMethods": [],
"metadata": {
"Content-Type": [
{
"type": "application",
"subtype": "octet-stream",
"parameters": {},
"wildcardType": false,
"wildcardSubtype": false
}
],
"Content-Disposition": [
"attachment; filename=\"12-20200313.pdf\""
]
},
"entityTag": null,
"links": [],
"stringHeaders": {
"Content-Type": [
"application/octet-stream"
],
"Content-Disposition": [
"attachment; filename=\"12-20200313.pdf\""
]
},
"statusInfo": "OK",
"headers": {
"Content-Type": [
{
"type": "application",
"subtype": "octet-stream",
"parameters": {},
"wildcardType": false,
"wildcardSubtype": false
}
],
"Content-Disposition": [
"attachment; filename=\"12-20200313.pdf\""
]
}
}
Эта служба должна быть вызвана из классического c ASP аппликатива, а затем он должен сохранить PDF-файл на диск. Так что мне нужна эта служба, чтобы вернуть то, что можно было бы спасти. Я также попытался вернуть строку base64, представляющую файл pdf, затем декодирую ее в клиенте и сохраняю на диск. Это работает, но здесь есть 2 проблемы. Во-первых, я вижу много \ r \ n внутри закодированной строки pdf, которую мне нужно удалить, прежде чем пытаться декодировать ее на клиенте. Во-вторых, создание pdf-файла на клиенте занимает несколько минут.
Лучшее решение - загрузить его, но оно всегда возвращает json
Спасибо