RESTful 服务能否根据请求标头为同一资源同时返回 JSON 和 XML?

问题描述 投票:0回答:3

我有一个简单的 RESTful 方法,它当前返回一个对象的 JSON 表示。

我的问题更多是从架构的角度出发,而不是完全技术性的。

RESTful 服务是否应该以同时返回 JSON 和 XML 的方式设计?

据我所知,这是一种不好的做法,应该为此定义单独的资源。一种资源应返回 JSON 数据,另一种应返回 XML。

我想得对吗?

java xml json rest restful-architecture
3个回答
30
投票

同一资源可能会根据请求返回 XML 或 JSON,但不应同时返回两者。您将知道根据请求返回哪一个,因此无需生成两者——只需生成您要返回的那个即可。

这里是您可以选择如何决定返回哪个。按顺序评估,当你确定要返回的格式时停止:

  1. 如果已将扩展名添加到资源中(
    GET /user/1234.json
    GET /user/1234.xml
    ),请将其用作请求的格式。
  2. 如果设置了 Accept 标头,则使用该标头的值作为请求的格式。
  3. 如果有请求主体(如 POST 的情况),并且 Content-Type 标头指定 JSON 或 XML,请使用它。
  4. 如果以上都不适用,请使用默认格式(通常使用 JSON 作为默认格式,除非您的客户通常仍在使用 XML)。

2
投票

没有。您表示资源的方式应该由您的客户所期望的来定义(有一个 http-header 说明客户接受什么表示)。 这意味着您的服务器应该检查当前客户端接受的表示形式是什么,并以这种表示形式发送响应(或者发送一个表示他不能以该媒体类型表示资源的响应)


0
投票

Step 1: 在pom.xml中的dependencies部分添加下面的依赖

第 2 步:转到您的控制器类(提到@RestController)并在下面添加:

获取方法:
@GetMapping(path = "/getNews",produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
公共获取方法
{
//你的逻辑
}

与其他方法一样 POST,PUT...
对于post方法:
@PostMapping(produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE} )
公共邮寄方法
{
//你的逻辑
}

第 3 步: POSTMAN 中的输出
在标题部分添加键和值
对于 XML 输出 添加 -> Key 作为 Accept,Value 作为 application/xml,如下所示 对于 JSON 输出 添加 -> Key 作为 Accept,Value 作为 application/json,如下所示

© www.soinside.com 2019 - 2024. All rights reserved.