"Application/vnd.api+json"抛出"Unsupported Media Type"



我正在使用Rest Assured为POST调用自动化API,对于Content-Type和ACCEPT头,我必须使用">application/vnd.API+json"。但每次使用"application/vnd/API+json"时,我都会得到415个状态代码。尽管使用Postman的相同POST调用工作得非常好。

这是我的示例代码:

ApiUtils.setBaseURI("xxxxx"); 
ApiUtils.setBasePath("/orders"); 
RequestSpecification request = RestAssured.given().auth().oauth2(BaseClass.token);
request.header("ACCEPT", "application/vnd.api+json");
request.header("Content-Type", "application/vnd.api+json");
request.body(JsonCreator.createJson());
Response response = request.post();

以下是收到的响应

Request method: POST
Request URI:    https://xxxxxx/orders
Headers:        ACCEPT=application/vnd.api+json
Content-Type=application/vnd.api+json; charset=ISO-8859-1
Cookies:        <none>
Multiparts:     <none>
Body:
{
"data": {
"type": "orders",
"attributes": {
"external_id": "2020-04-04-172",
"order_items": [
{
"menu_item_id": "5d29ae25805aaf0009095410",
"variation_id": "5d29ae25805aaf0009095418",
"quantity": 1,
"note": "some note"
}
],
"revenue_center_id": "5d7b44021a2976000938da62",
"order_type_id": "5d27329790a5ba0009386a75",
"guests": [
{
"first_name": "xx",
"last_name": "xx",
"email": "xx@gp.com",
"phone": "5551234567"
}
],
"tip_amount": "1.00"
}
}
}
{"errors":[{"status":415,"code":415,"title":"Content-Type must be JSON API-compliant"}],"jsonapi":{"version":"1.0"}}

正如其他帖子/评论所建议的那样,我已经尝试将内容类型更改为application/json,但这对我的资源来说似乎是不正确的。

目前,我使用Rest Assured v4.3.0和json路径v4.3.0。此外,为了构建请求主体,我使用com.google.gson.JsonObject库。

在日志中,您可以看到Rest Assured自动添加的正在发送的">charset=ISO-8859-1",.config((禁用该选项,并且不发送字符集

尝试以下

ApiUtils.setBaseURI("orders");
ApiUtils.setBasePath("/orders");
RequestSpecification request = RestAssured.given().auth().oauth2(BaseClass.token).header("Content-Type", "application/vnd.api+json").header("Accept", "application/vnd.api+json").config(RestAssured.config().encoderConfig(encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false))).log().all();
request.body(JsonCreator.createJson());
Response response = request.post();

这也需要一个静态导入

导入静态io.restasured.config.EncoderConfig.EncoderConfig;

https://github.com/rest-assured/rest-assured/wiki/Usage#avoid-自动将字符集添加到内容类型头

相关内容