Не удалось записать JSON: для класса FileDescriptor не найден сериализатор и не обнаружены свойства для создания BeanSerializer, возвращающего PDF из состояния покоя. - PullRequest
0 голосов
/ 05 августа 2020

У меня есть служба java rest, которая должна возвращать PDF.

Это мой код:

@RequestMapping(value = "/pdf", method = RequestMethod.GET)
@Produces("application/pdf")
public javax.ws.rs.core.Response getPdf() throws Exception {
    try {
        File file = new File("xxx");
        FileInputStream fileInputStream = new FileInputStream(file);
        javax.ws.rs.core.Response.ResponseBuilder responseBuilder = javax.ws.rs.core.Response.ok((Object) fileInputStream);
        responseBuilder.type("application/pdf");
        responseBuilder.header("Content-Disposition", "attachment; filename=" + file.getName());
        return responseBuilder.build();
        
    } catch(Exception ex) {
        return javax.ws.rs.core.Response.serverError().build();
    }
}

Когда я тестирую его с помощью POSTMAN, я всегда получаю эту ошибку:

org.springframework.http.converter.HttpMessageNotWritableException: не удалось записать JSON: для класса java .io.FileDescriptor не найден сериализатор и не обнаружены свойства для создания BeanSerializer (чтобы избежать исключения, отключите SerializationFeature.TIL_ON_ ) (через цепочку ссылок: org.glassfi sh .jersey.message.internal.OutboundJaxrsResponse ["context"] -> org.glassfi sh .jersey.message.internal.OutboundMessageContext ["entity"] -> java .io.FileInputStream ["fd"]); вложенное исключение - com.faster xml .jackson.databind.ex c .InvalidDefinitionException: для класса java .io.FileDescriptor не найден сериализатор и не обнаружены свойства для создания BeanSerializer (чтобы избежать исключения, отключите SerializationFeature.FAIL_ON_EMPTY_BEANS) (через цепочку ссылок: org.glassfi sh .jersey.message.internal.OutboundJaxrsResponse ["context"] -> org.glassfi sh .jersey.message.internal.OutboundMessageContext ["entity"] -> java .io.FileInputStream ["fd"])

Я не понимаю, почему говорится о JSON, если я пытаюсь вернуть PDF-файл

Что не так с этим кодом?

Спасибо

ОБНОВЛЕНИЕ: После изменения кода на следующий я не получаю сообщение об ошибке:

File file = orderLabelService.getLabelsSummary(supplierId, date);

return javax.ws.rs.core.Response.ok(file, MediaType.APPLICATION_OCTET_STREAM)
          .header("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"" )
          .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\""
        ]
    }
}

Мне нужно сохранить или открыть PDF-файл на клиенте

Спасибо

...