Java Служба отдыха с @Produces MediaType.APPLICATION_OCTET_STREAM возвращает json вместо файла pdf - PullRequest
1 голос
/ 05 августа 2020

У меня есть служба 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

Спасибо

...