Spring REST 返回 PDF - 响应状态 406(不可接受)

2024-01-05

我读了很多关于此类问题的问题,但他们都建议使用正确的杰克逊版本。这是我目前的情况:

休息 API:

@RequestMapping(value = "get/pdf/{id}", headers="Accept=*/*", method = RequestMethod.GET, produces = "application/pdf")
    @Override
    public ResponseEntity<InputStream> getPdfContractById(@PathVariable("id") Long id);

Using Accept:*/*映射请求时产生错误(发生 404)

从我的 pom 中:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.4.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.4.1.1</version>
    </dependency>

我也尝试添加这两个依赖项,但没有任何变化:

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

响应客户端:There was an unexpected error (type=Not Acceptable, status=406).标头包括:

    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch

它出什么问题了?


More details

我使用此代码返回远程 PDF 文件:

    URL url = null;
    try {
        url = new URL(urlStr);
    } catch (MalformedURLException e) {
        e.printStackTrace();
        throw new MyException(e.getMessage());
    }
    InputStream pdfFile = null;
    try {
        pdfFile = url.openStream();
    } catch (IOException e) {
        e.printStackTrace();
        throw new MyException(e.getMessage());
    }

    ResponseEntity<InputStream> re = ResponseEntity
            .ok()
                    //     .headers(headers)
                    //     .contentLength(contentLength)
            .contentType(
                    MediaType.parseMediaType("application/pdf"))
            .body(pdfFile);
   return re;

基本上不需要添加produces = "application/pdf"在 RequestMapping 中,因为它似乎尝试在内部转换 ResponeBody 。您只需添加MediaType到您需要的响应标头。

@ResponseBody
@RequestMapping(value = "get/pdf/{id}", headers="Accept=*/*", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> getPdfContractById(@PathVariable("id") Long id){
        // Get the remove file based on the fileaddress
        RemoteFile remotefile = new RemoteFile(id);

        // Set the input stream
        InputStream inputstream = remotefile.getInputStream();
        // asume that it was a PDF file
        HttpHeaders responseHeaders = new HttpHeaders();
        InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
        responseHeaders.setContentLength(contentLengthOfStream);
        responseHeaders.setContentType(MediaType.valueOf("application/pdf"));
        // just in case you need to support browsers
        responseHeaders.put("Content-Disposition", Collections.singletonList("attachment; filename=somefile.pdf"))
        return new ResponseEntity<InputStreamResource> (inputStreamResource,
                                   responseHeaders,
                                   HttpStatus.OK);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring REST 返回 PDF - 响应状态 406(不可接受) 的相关文章

随机推荐

  • 使用 Swift 创建 Flutter 项目

    Flutter 允许支持Swift编程语言 我怎样才能整合我的SwiftAndroid Studio 中 Flutter 项目的代码文件 没有添加 创建 Swift 文件的选项 在NewAndroid Studio 中的菜单 我认为更好的方
  • 比较 Java 中的 2 个字符串是否有分隔符

    字符串 1 func1 test1 字符串2 func1 test2 我想将这两个字符串与第一个左大括号 进行比较 因此 对于给定的示例 它应该返回 true 因为两个字符串中直到 的字符串都是 func1 有没有什么方法可以在不分裂的情况
  • 如何在asp.net core中处理cookie过期

    我想知道如何正确处理cookie过期的情况 是否可以执行自定义操作 我想要实现的是 当 cookie 过期时 从当前 cookie 中取出一些信息 并通过该信息重定向到操作参数 是否可以 没有一个好的方法可以实现这一点 如果 cookie
  • 在 C++ 中处理 CPU 异常

    是否有跨平台的方法来处理 CPU 异常 例如分段错误或除以零 可以说 我需要调用一些潜在不安全的函数 例如从插件文件 这可能会导致段错误 或在执行之前无法测试的一些其他问题 我知道 C 标准库有信号处理函数 但我不知道如何使用它们来处理问题
  • 为什么我收到“无法解析符号”?

    我以前导入过这个项目 没有任何困难 我不确定发生了什么变化 I click Import Project并选择了getting started with selenium http github com ddavison getting s
  • 使用 thymeleaf 中的搜索功能和请求参数

    我有一个页面 可以在其中获取条目列表 现在 我希望能够从这些列表中进行搜索 我当前用于检索列表的网址是 show products 我想在此页面中添加一个搜索表单 以便我可以使用请求参数进行搜索 是的 我可以使用ajax 但我必须使用请求参
  • 从 pdf 中读取证书

    我正在使用 ITextSharp 来从数字签名的 pdf 文档中读取证书信息 The ITextSharp Text Pdf PdfPKCS7类公开三个属性 Certificates 如清单所示 SignCertificate 作为单个对象
  • 对 pandas 中的布尔值进行重新采样

    我遇到了一个属性 我发现在其中重新采样布尔值很奇怪pandas 这是一些时间序列数据 import pandas as pd import numpy as np dr pd date range 01 01 2020 5 00 perio
  • 递归地包含头文件以进行合成

    我正在处理一个 C 项目并尝试将其配置为使用 syntastic 在我的项目中 我有一个头文件的嵌套目录结构 实际的嵌套结构要糟糕得多 这是一个例子 libs dir1 foo1 h dir2 foo2 h foo3 h dir3 foo4
  • 如何在 Rails 中获取 ruby​​ 对象的大小(以 mb 为单位)?

    我想查询 ActiveRecord 模型 修改它 并计算新对象的大小 以 mb 为单位 我该怎么做呢 不幸的是 数据库中数据行的大小以及内存中 ruby 对象的大小都不容易获得 虽然了解内存中的对象大小要容易一些 但您仍然必须找到属于活动记
  • LocationMatch 和 DAV svn

    我正在尝试使我们的 Subversion 存储库可以通过多个 URL 进行访问 为此 我考虑使用 LocationMatch 指令 我的配置是
  • 获取文本文档中每行的字符数

    我正在尝试获取文本文档中每一行的字符数 我的文本文档的内容是 1 15 69 124 300 我一直在尝试 PS 脚本的变体 get content c serverlist txt foreach object measure objec
  • Java 递归暴力迷宫求解器

    在尝试编写一个强力解决迷宫的 C 程序时 我首先编写了这个 java 程序来测试一个想法 我对 C 很陌生 打算在 Java 中正确使用它后将其转换 因此 我尝试远离数组列表 花哨的库等 以便更容易转换为 C 该程序需要生成最短步骤的单宽度
  • PHP 和 Wordpress 中的调试

    ini set log errors On and define WP DEBUG true 我正在尝试创建一个错误日志文件 但我对这两个文件感到困惑 会出现什么样的错误log errors and WP DEBUG The define
  • 使用 C# 从 SQL Server 数据生成 XML

    我在 SQL Server 中有一个生成 XML 输出的查询 我想使用 C 产生相同的结果 是否可以 查询是 select T1 1 HomeID as HomeID select T1 2 DayID as ID select T2 Rn
  • com.sun.xml.internal.ws.client 不存在

    我试图捕获 ClientTransportException 但我的程序在编译阶段失败 出现以下异常 ERROR workspace rates java service bundle1 src main java com connecto
  • 有没有办法知道 NSUserNotificationCenter 中有多少个 NSUserNotification?

    Is there any non private way of knowing how many notifications there are in the Notification Center NSUserNotificationCe
  • 为什么 PDO fetchColumn() 在这里不起作用

    我正在尝试计算查询返回的行数 我正在这样做 what Norman stmt conn gt prepare select names as names from names where names what stmt gt bindPar
  • 如何为文本框添加效果到样式

    我试图向样式添加效果以便重用它 但由于某种原因它不起作用
  • Spring REST 返回 PDF - 响应状态 406(不可接受)

    我读了很多关于此类问题的问题 但他们都建议使用正确的杰克逊版本 这是我目前的情况 休息 API RequestMapping value get pdf id headers Accept method RequestMethod GET