一个RESTful服务是否可以根据请求头返回同一资源的JSON和XML?

8wtpewkr  于 2023-05-02  发布在  其他
关注(0)|答案(3)|浏览(219)

我有一个简单的RESTful方法,它当前返回对象的JSON表示。
我的问题更多的是从架构的Angular ,而不是完全技术性的。
RESTful服务是否应该设计为同时返回JSON和XML?
据我所知,这是一种不好的做法,应该为此定义单独的资源。一个资源应该返回JSON数据和另一个XML。
我想的对吗?

xvw2m8pv

xvw2m8pv1#

同一个资源可以根据请求返回XML或JSON,但不应该同时返回两者。您将根据请求知道返回哪一个,因此不需要同时生成两个--只需生成要返回的那个。
以下是您可以选择如何决定返回哪个。按顺序求值,在确定要返回的格式后停止:
1.如果资源中添加了扩展名(GET /user/1234.jsonGET /user/1234.xml),则使用该扩展名作为请求的格式。
1.如果设置了Accept标头,则使用该标头的值作为请求的格式。
1.如果有一个请求体(如POST的情况),并且Content-Type标头指定JSON或XML,请使用它。
1.如果以上都不适用,则使用默认格式(通常使用JSON作为默认格式,除非您的客户通常仍在使用XML)。

5n0oy7gb

5n0oy7gb2#

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

2vuwiymt

2vuwiymt3#

**第一步:**在pom的dependencies部分添加下面的dependencies。XML

第二步:进入你的控制器类(其中提到@RestController),并添加以下内容:
get方法:

@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中的OUTPUT

在标题部分添加键和值

对于XML输出add -〉Key as Accept and Value as application/xml如下

对于JSON输出add -〉Key as Accept and Value as application/json如下

相关问题