为什么Java REST样式中的javax.ws.rs.Produces可以使用某些MediaType

3 java rest web-services jax-rs java-ee

我不明白为什么javax.ws.rs.Produces可以使用两种以上的媒体类型.据我所知,Web服务客户端必须确切知道Web服务返回的媒体类型是什么.我在http://docs.oracle.com/javaee/6/api/javax/ws/rs/Produces.html查看了它的API,但我找不到答案.有人有什么想法吗?谢谢.

gre*_*ker 6

restful端点可以返回任意数量的媒体类型.这允许服务支持可能具有不同要求的多个客户端.客户端通过设置Accept标头告诉服务他们期望返回什么内容类型,或者在某些情况下使用url上的特殊后缀,如.json.xml.

例:

让我们假装您有两个客户端呼叫相同的Web服务.

  • 客户端A可能只能解析XML.因此,他们请求通过发送的XML响应application/xmlAccept报头中.

  • 客户端B可能能够解析XML和JSON,但他们更喜欢JSON.所以他们发送application/json了Accept标头.

为了让restful端点支持这两个请求,它将被注释如下:

@GET
@Produces({"application/json", "application/xml"})
public Foo getFoo()
{
   return Foo();  //This will be marshalled to XML or JSON depending on what the client requests
}
Run Code Online (Sandbox Code Playgroud)