当前位置: 首页 > 知识库问答 >
问题:

JSReport API使用Java从响应中保存PDF

孙海
2023-03-14

我需要保存POST服务的PDF,但总是收到错误:

public static final String base_url = "https://evx.jsreportonline.net/api/report";

static {
    HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("evx.jsreportonline.net"));
}

private HttpHeaders getHeaders() {
    if (null == headers) {
        headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setAccept(Arrays.asList(MediaType.ALL));
        headers.add("Authorization", "Basic " + Base64.getEncoder().encodeToString("test_pdf:test_pdf".getBytes()));
    }
    return headers;
}

public void getRepo() {

    List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    RestTemplate restTemplate = new RestTemplate();
    Json jsonObj = new Json("{\"template\":{\"shortid\":\"JCdUaT_\"},\"data\":null}");

    // REQUEST
    HttpEntity<Object> entity = new HttpEntity<>(jsonObj, this.getHeaders());

    /* MENSAGE CONVERTER */
    converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
    messageConverters.add(converter);
    restTemplate.setMessageConverters(messageConverters);

    /* RESPONSE */
    try {
        Object result = restTemplate.postForObject(base_url, entity, Object.class);
        byte[] resultByteArr = (byte[]) result;
    } catch (Exception e) {
        System.out.println(e.getMessage() + " " + e);
    }
}

共有1个答案

唐增
2023-03-14

在这种情况下,curl对于调试非常有用。

如果我使用您的属性、auth、json有效负载和apiendpoint并用curl发布请求

curl-i--用户test_pdf:test_pdf-h“content-type:application/json”-h“accept:application/json”-x post-d'{“template”:{“shortId”:“jcduat_”},“data”:null}“https://evx.jsreportonline.net/api/report

我得到以下建议

HTTP/2 200 
date: Fri, 24 Jan 2020 19:45:07 GMT
content-type: application/pdf
server: nginx/1.17.6
x-powered-by: Express
access-control-allow-origin: *
access-control-expose-headers: *
set-cookie: render-complete=true; Path=/
set-cookie:  
content-disposition: inline;filename=invoice-main.pdf
jo-credits-spent: 1.12

Warning: Binary output can mess up your terminal. Use "--output -" to tell 
Warning: curl to output it to your terminal anyway, or consider "--output 
Warning: <FILE>" to save to a file.

这告诉我,我正在获取二进制数据作为响应。在这种情况下,我将需要使用不同的转换器。如图所示尝试“ByteArrayHttpMessageConverter”良好的ans

 类似资料:
  • 我有一个JSON响应,希望从响应中提取值列表,例如id的所有值。 我已经尝试了下面的代码,但无法实现,但它只是打印id的第一个值,即4。 我是初学者,我也不确定我们是否能达到同样的效果。任何帮助都将不胜感激。提前谢谢。

  • 我有一个关于Rest保证的问题。-https://code.google.com/p/rest-assured/wiki/Usage 我知道我可以使用REST保证进行HTTP调用(. get. put等)。)并使用时()等验证响应。我想验证我已经保存在数据库中的JSON响应,而不是实时调用Web服务并验证它的响应。 我可以使用REST-保证加载JSON响应作为字符串并验证它吗?

  • 问题内容: 我正在尝试使用Jersey从Web资源下载SWF文件。 我已经编写了以下代码,但是无法正确保存文件: 它是保存的假设,响应不会返回一个SWF文件,作为回报。 但是,当我尝试打开SWF时,什么也没有发生(也没有错误),这表明我的文件不是根据响应创建的。 问题答案: 从Java 7开始,您还可以使用新的NIO API将输入流写入文件:

  • 问题内容: 我正在尝试从Java swing应用程序将图像保存在MySQL数据库中。我正在使用JFileChsoser来获取图像的路径。然后,在转换文件之后,可以将其保存在BLOB类型的MySQL列中。但是我尝试保存的每张图像都无法正确保存或正确转换。有人可以告诉我我在做什么错吗? 然后,在此之后,我将其保存到数据库中,如下所示。 并且我已经将变量userimage和path声明为全局变量 问题答

  • 我正在为我的API构建一些简单的负载测试,为了确保一切正常,我还想查看响应标头和数据。但是当我使用命令行运行测试,然后重新打开GUI以添加查看结果树侦听器并加载创建的文件时,响应标头或响应数据为空。 我在user.properties中输入了以下值(也尝试在jmeter.properties中取消这些值的注释并在那里更改它们,结果相同) 但在打开结果文件时仍然没有运气。我尝试在 -l 标记之后将文

  • 提交表单后,我想将结果页保存为PDF格式。我怎么才能做到这一点。我对其他编程语言一窍不通,所以请帮助使用java代码。