2017-02-22 20 views
0

Я новичок в JAX-RS и имею ряд проблем (что странно заставляет меня пропустить SOAP). Вот фрагмент моего кода. Метод getMergedPDFReport должен взять файл и вернуть файл после некоторой обработки. После чего я бы беспокоиться о клиентеПроблемы с JAX-RS

@GET 
@Produces("application/pdf") 
@Path("merge-service") 
public Response getMergedPDFReport(@QueryParam(ApiParameters.WORD_DOCUMENT) File wordDocument, 
            @QueryParam(ApiParameters.MERGE_FIELDS)Object[] fieldNames, 
            @QueryParam(ApiParameters.MERGE_VALUES) Object [] fieldValues) { 
    ResponseBuilder builder =null; 
    try { 
     File product = DocumentUtil.generatePDF(wordDocument, fieldNames, fieldValues); 

     builder = Response.ok(product); 
     builder.header("Content-Disposition", "attachment; filename=\\\"report.pdf\\\""); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return builder.build(); 
} 

я получаю предупреждение о моем журнале сервера, который не говорит: «Нет источника инъекции найдено для параметра типа общественного javax.ws.rs.core.Response». Кажется, я не знаю почему. 2. Я использую аннотацию @QueryParam? Должен ли я использовать его для типов файлов и массивов? Я видел много дебатов через @BeanParam, @MatrixParam и @QueryParam. Поскольку я не знал, что делают первые два, я решил сохранить это просто.

Любая помощь будет оценена по достоинству.

+0

Я не уверен, если предупреждение вы получите на самом деле связано с кодом вы представили, как вы не имеют параметр типа 'Response' в этом методе. В вашем общем дизайне есть несколько недостатков. IMO: используйте HTTP POST, а не GET для загрузки файлов. GET - безопасная и идемпотентная операция и поэтому не должна изменять состояние ресурсов. Вызываемый URI часто ограничивается каркасами по длине. Если вы передаете закодированные файлы в качестве параметра запроса, длина URI может стать довольно большой и, следовательно, увеличить вероятность отклонения. –

ответ

0

Я думаю, вы не можете использовать queryParam для файлов. Вы должны использовать @Consumes с многостраничной формой.

Проверьте это: http://www.javatpoint.com/jax-rs-file-upload-example

+0

Основная проблема заключается в том, что ОП пытается отправить файл с использованием метода «GET». Хотя в соответствии с [RFC 7231] (https://tools.ietf.org/html/rfc7231#section-4.3.1) семантика полезной нагрузки, выданной с запросом GET, не указана, спецификация обескураживает использование тел GET для того, чтобы оставаться обратно совместимым со старой версией, которая может отклонять запросы, выдаваемые органами GET. Кроме того, если файл на самом деле мал, он может быть закодирован с использованием, например, base64 и передан как параметр запроса, хотя это не совсем красиво –

Смежные вопросы