Использование Micronaut для создания функции AWS Lambda, возвращающей двоичный контент

Я не уверен, что это вопрос: Micronaut или AWS Gateway. Любая помощь была бы фантастической.

Я пытаюсь использовать платформу Micronaut для создания функции Lambda, которая возвращает PDF-файл через AWS API Gateway. Это поддерживается? Что мне нужно изменить, чтобы вернуть двоичный контент? Я попытался изменить тип возвращаемого значения метода на byte [], но похоже, что Content-Type всегда является application / json.

В качестве контекста я надеюсь использовать Groovy для написания функции и Dynamic Reports для создания PDF-файла с использованием данных из DynamoDB.

Спасибо заранее.


person J. Snook    schedule 25.05.2018    source источник
comment
Будьте осторожны, возвращая PDF-файлы через API-шлюз, есть ограничение на количество байтов, которые вы можете вернуть, я думаю, это 10 МБ. Кроме того, для доставки PDF-файла используется время вычислений, поэтому рекомендуется проверить, не превышает ли он определенный размер, а затем вместо возврата PDF сохранить PDF-файл в корзину S3, создать подписанный URL-адрес с истекающим сроком действия для файла и вернуть URL вместо этого. Затем вы можете применить жизненный цикл к корзине, чтобы удалить старые файлы.   -  person David Brown    schedule 31.05.2018
comment
Отлично - спасибо за подсказку :-)   -  person J. Snook    schedule 01.06.2018


Ответы (2)


Теперь мне удалось заставить это работать.

Я создал объект ответа:

class ReportResponse {

    boolean isBase64Encoded = true
    def headers
    byte[] body
}

а затем в моем обработчике у меня есть:

ReportResponse reports(data, Context context) {
    return new ReportResponse(
        headers:  [ "Content-Type": "application/pdf" ],
        body: JasperExportManager.exportReportToPdf(new 
    MemberReport().getReport(data.queryStringParameters.id)))
}

К сожалению, когда я жестко закодировал заголовки в классе ReportResponse, произошла ошибка консоли (что-то насчет OpenJDK ..)

Вышеупомянутое позволяет мне использовать Lambda Proxying в AWS API Gateway, и поэтому полный объект запроса передается функции.

Единственное другое изменение - установить '* / *' как двоичный файл в AWS API Gateway, что подходит для моего варианта использования.

person J. Snook    schedule 28.05.2018

Вы пробовали использовать @Produces?

person Sergio del Amo    schedule 25.05.2018
comment
Привет - да попробовал. Спасибо за идею :-) - person J. Snook; 28.05.2018