我的Spring Boot服务器返回406 Http错误代码

时间:2018-11-16 12:44:20

标签: java spring spring-boot

我有一个Spring Boot服务器应用程序,它从外部服务接收具有以下特征的POST请求:

标题

接受编码:gzip,压缩

用户代理: Apache-HttpClient / 4.3.6(java 1.5)

连接:保持活动状态

主机: webhook.site

内容类型: application / x-www-form-urlencoded

内容长度: 558

查询字符串:(空)

表单值

帐单号: 41492032464

帐单值: 600000.0

说明:说明

为了能够处理来自外部服务的POST请求,我实现了以下控制器,它的作用是创建并存储发票,但是我的应用程序返回HTTP错误406:

@RequestMapping(value = "/bills", method = RequestMethod.POST, headers = "Accept=application/x-www-form-urlencoded")
    @ResponseBody
    @Transactional
    public void createBill(UriComponentsBuilder uriComponentsBuilder, final HttpServletRequest request,
            final HttpServletResponse response) throws IOException {
}

我知道错误是指客户端(在这种情况下为外部服务)不理解服务器响应的“语言”,但是正如您在控制器标头中所看到的那样,我接受“ application / x -www-form -urlencoded“我不知道是否是由于另一个问题,也是我的控制器无效

该控制器应如何在我的Spring Boot应用程序中实现?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您应将consumesMediaType一起使用,以定义受支持的Content-Type。您可以使用@PostMapping来进一步简化:

@PostMapping(value = "/bills", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)

像现在一样在响应上设置Accept头是没有意义的,这是一个请求头。根据{{​​3}}:

  

Accept请求HTTP标头会通告客户端能够理解的内容类型,以MIME类型表示。然后,使用内容协商,服务器选择建议之一,使用建议,并通过Content-Type响应头将其选择通知客户端。浏览器根据完成请求的上下文为此标头设置足够的值:获取CSS样式表时,为请求设置的值与获取图像,视频或脚本时不同。