Swagger 415不支持的媒体类型:POST请求中的application / json而不是text / plain

时间:2015-01-30 22:01:01

标签: java json rest content-type swagger-ui

我有两个REST-GUI来测试我的REST应用程序。 一个是swagger创建的,另一个是在Chrome中运行的Advanced REST Client。

我对服务发帖,Swagger失败,错误415,Advanced Rest Client成功。

两者之间的区别在于请求标头中的Content-Type。 OK版本具有Content-Type:text / plain 错误版本具有:Content-Type:application / json

其余的都是一样的。我切断了有效载荷,但在两种情况下它们也完全相同。

我不知道如何改变Swagger中的Content-Type,如果可能的话,如果需要的话。

以下是您在此问题中可能需要帮助的信息。如果您需要更多信息,请提供。

非常感谢您的帮助。

最好的问候。

信息如下:


确定:高级REST客户端

Remote Address:127.0.0.1:8080
Request URL:http://localhost:8080/oak-kernel-2.0/oak/archetype
Request Method:POST
Status Code:200 OK

POST /oak-kernel-2.0/oak/archetype HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 10642
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ....
Content-Type: text/plain
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,nl;q=0.6
Cookie: _ga=GA1.1.1597438054.1422608427

有效载荷(片段):

{"archetype": "archetype (adl_version\u003d1.4)\n\top........

响应:

Accept-Ranges:bytes
Content-Length:87
Content-Type:application/json;charset=UTF-8
Date:Fri, 30 Jan 2015 20:59:49 GMT
Server:Restlet-Framework/2.2.3
Vary:Accept-Charset, Accept-Encoding, Accept-Language, Accept

错误:Swagger

Remote Address:127.0.0.1:8080
Request URL:http://localhost:8080/oak-kernel-2.0/oak/archetype
Request Method:POST
Status Code:415 Unsupported Media Type

POST /oak-kernel-2.0/oak/archetype HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 10642
Accept: application/json
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ....
Content-Type: application/json
Referer: http://localhost:8080/swagger/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,nl;q=0.6
Cookie: _ga=GA1.1.1597438054.1422608427

有效载荷(片段):

{"archetype": "archetype (adl_version\u003d1.4)\n\top........

响应

Accept-Ranges:bytes
Content-Length:554
Content-Type:text/html;charset=UTF-8
Date:Fri, 30 Jan 2015 21:28:12 GMT
Server:Restlet-Framework/2.2.3

5 个答案:

答案 0 :(得分:1)

我自己找到了答案。我需要将一个mediatype放在Rest资源层的@ Post-annotation中,就像这个

一样
@Post("json")

答案 1 :(得分:0)

我也面临类似的问题。在我的情况下,我的REST客户端API调用是正常的,但通过Swagger的API调用失败。

REST client -> content-type:application/json

Swagger -> content-type:text/plain

我不明白为什么我的招摇将内容类型更改为"text/plain"以进行帖子调用。

答案 2 :(得分:0)

如果这对以后的任何人有帮助,

在我的情况下,错误:

{
  "timestamp": "2019-01-22T18:23:48.989+0000",
  "status": 415,
  "error": "Unsupported Media Type",
  "message": "Content type '' not supported",
  "trace": "org.springframework.web.HttpMediaTypeNotSupportedException: Content type '' not supported

  [...]
}

我正在输入@RequestMapping:

import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;

@RequestMapping(value = "/products", 
                consumes= APPLICATION_JSON_VALUE, 
                produces = APPLICATION_JSON_VALUE)
public class ProductResource {

 [...]

}

但是我意识到,产生此错误的是“消耗”,将其从@RequestMapping删除了Swagger接口ui上的所有工作。

右:

import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;

@RequestMapping(value = "/products", 
                produces = APPLICATION_JSON_VALUE)
public class ProductResource {

 [...]

}

答案 3 :(得分:0)

在 Swagger Ui 上遇到了同样的问题,从 @RequestMapping 中删除“Consumes”也对我有用。

答案 4 :(得分:0)

这对我有用

headers: <String, String>{
        'Content-Type': 'application/json',
      },

最初是这样的:

    headers: <String, String>{
            'Content-Type': 'application/json; charset=UTF-8',
      },

后来者从 GO swagger 后端返回了这个 json,

<块引用>

{code: 415, message: 不支持的媒体类型“text/plain”,只有 [application/json] 被允许}