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

根据请求“Accept”报头,具有不可接受特性的响应-HTTP状态406-spring-boot

隆功
2023-03-14

任何需要50美元解决此问题的参与者,请联系

我正在得到不接受的根据请求“接受”头,然而,我相信我已经做了一切正确的,我可以。有人能帮助解决这个问题吗。我使用的是Spring4.1。

目标是能够以text/xml格式返回响应。如果我删除produces=text/xml指令,那么我的应用程序可以正常工作,即没有错误,但是源系统以意外的方式处理响应。

请求如下:curl-x post-h“content-type:application/x-www-form-urlencoded”-h“authorization:Basic ywrtaw46ywrtaw4=”-h“cache-control:no-cache”-h“postman-token:78637A4F-E153-4242-C922-96757D01442a”-d Then values....

我的POM:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.0.rc1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.0.rc1</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>

我的控制器有以下符号:

@RestController
@RequestMapping("/test")
@EnableWebMvcMy Controller has the following notations:

主类具有以下符号@Configuration@EnableAutoConfiguration@ComponentScan

我没有应用程序上下文xml,因为我在我的endpoint方法上使用@AutoWired,如下所示

@RequestMapping(value="/IDEA",  headers = {"Accept=*/*"}, produces="text/xml",    method= {RequestMethod.POST, RequestMethod.GET})
@Autowired
public MyResult processMyRequest(HttpServletRequest request) 

共有1个答案

韦棋
2023-03-14

我看到的第一个问题是@enablewebmvc应该与@configuration一起在主类上指定,但我认为在指定@enableautociguration时甚至不需要它。

另一个问题是@requestmapping()有一个consumes的属性,您可能应该使用这个属性,而不是查找accept头。原因是accept标头通常包括多种媒体类型,而不仅仅是*/*,因此,该标头上的相等性检查不会存在。

*更新*我在用于解释content-type标头而不是accept标头的consumes上出错了。Spring尝试将productaccept头匹配,以确定该方法是否能够响应传入的请求。这就解释了为什么会出现406错误,因为Spring看到方法试图输出text/xml但请求可能不接受accept头中的内容类型。

为了进一步排除故障,您可以设置一个请求记录器,查看请求如何进入服务的细节,以确定是否有什么原因导致Spring无法正确处理它。如果添加以下bean并在org.springframework.web.filter.CommonsRequestLoggingFilter上启用调试级日志记录,则可以看到。

@Bean
public Filter logFilter() {
    CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
    filter.setIncludeQueryString(false);
    filter.setIncludePayload(false);
    filter.setIncludeHeaders(true);
    return filter;
}

如果您可以使用请求日志更新您的问题,这将有助于故障排除。

*更新#2*能够重现该错误。为org.springframework.web添加debug日志级别更清楚地显示了这个问题。

2016-08-11 02:26:58.242 DEBUG 82904 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/test/IDEA]
2016-08-11 02:26:58.244 DEBUG 82904 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /test/IDEA
2016-08-11 02:26:58.247 DEBUG 82904 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method [public ca.tuatara.stackoverflow.MyController$MyResult ca.tuatara.stackoverflow.MyController.processMyRequest(javax.servlet.http.HttpServletRequest)]
2016-08-11 02:26:58.247 DEBUG 82904 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Last-Modified value for [/test/IDEA] is: -1
2016-08-11 02:26:58.258 DEBUG 82904 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolving exception from handler [public ca.tuatara.stackoverflow.MyController$MyResult ca.tuatara.stackoverflow.MyController.processMyRequest(javax.servlet.http.HttpServletRequest)]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation

无法找到可接受的表示形式是关键字。通过指定您想要XML,您必须包含一个库来将对象作为XML进行整理,如Spring MVC文档中所述。正在为以下内容添加依赖项:

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>

使其适用于我的示例应用程序。试试看!

 类似资料:
  • 在我的pom中有以下详细信息。xml 应用程序配置。xml: JSP页面: 控制器: 我正在调用我的url作为: 点击按钮后,返回的url,返回406和描述是: 此请求标识的资源只能根据请求“接受”标头生成具有不可接受特征的响应 我跟踪了这个链接,但没有结果。

  • 问题内容: 在我的pom.xml中有以下详细信息 JSP页面: 控制器: 我正在以以下方式调用我的网址: 单击按钮后,它返回url,因为 http://lt-50k7sy1:8080/QuickBooks-UX/syncAccounts它返回406,描述为: 该请求标识的资源只能根据请求“接受”标头生成特性不可接受的响应 问题答案: 将以下jar添加到Spring 4.1。*所需的pom.xml文

  • 问题内容: 这是我的javascript: 这是我的控制器: spring-servlet.xml 收到此错误: 标头: 响应标题 请求标题 有趣的注意事项: 我收到406错误,但休眠查询同时起作用。 每当我在保管箱中更改选择时,这就是tomcat日志所说的: 可能是什么问题?之前在SO中有两个类似的问题,我在那里尝试了所有被接受的提示,但是我猜它们没有起作用… 有什么建议?随意问的问题… 问题答

  • 应用程序是使用Spring MVC 4、Hibernate和jQuery开发的 下面jquery AJAX调用没有给出正确的响应。。说明406错误(不可接受) 我知道这是一个非常古老而常见的问题。我尝试过: 杰克逊罐子 在请求映射注释中:生产者作为JSON 在请求映射注释中:标头为JSON 2和3的组合 $. post而不是$. ajax(我知道这没什么区别) 我的bean对象(Validatio

  • Spring允许在中定义。 我已经在那里为HTTP 400、404、405等定义了许多其他异常处理程序,。。。然而,HTTP 406的ExceptionHandler(不可接受)似乎不起作用。处理程序被触发,我在日志中对此进行了检查,但没有使用结果。 我的目标是返回一个带有JSON主体的HTTP 406。 变型1 变体2 但是我总是从Tomcat得到类似的超文本标记语言响应: HTTP状态406-

  • 问题内容: 在我的Ruby on Rails应用程序中,我尝试通过POSTMAN REST客户端以Base64格式上载图像。发布图片时,我收到 406不可接受的响应 。当我检查数据库时,该图像在那里并且已成功保存。 此错误的原因是什么,我需要在标题中指定任何内容吗? 我的请求: 网址- 标头: 原始数据: 问题答案: 您的操作没有失败。 您的后端服务说您的客户端请求中的“ 接受 HTTP”标头中没