javax.ws.rs MediaType - 接受标题

时间:2016-01-06 21:17:21

标签: rest jax-rs mime-types media-type javax.ws.rs

@Consumes以及@Produces都接受媒体类型。请求中的Accept Header对应哪个注释?

在大多数示例中(例如How to deal with accept-parameters when developing a jax-rs application),它显示了使用@Produces从客户端请求接受标头。

1 个答案:

答案 0 :(得分:2)

@Consumes用于请求类型,即客户端发送的类型,即Content-Type。 E.g。

@Consumes("application/json")
...
> POST / HTTP/1.1
> Content-Type: application/json
{ "json": "data" }

< 200 OK

@Consumes("application/json")
...
> POST / HTTP/1.1
> Content-Type: application/xml
<xml><data></data></xml>

> 415 Unsupported Media Type

这里有两个示例请求。在服务器上都注释了@Consumes("application/json")。这意味着它只能处理以JSON格式发送的数据。第一个请求,客户端使用正确的Content-Type发送数据,因此它得到一个OK响应。第二个请求,它发送的XML数据不支持Content-Type,因此得到415。

@Produces用于服务器发送的数据类型。客户端还可以添加Accept标头以说明它可以接受(或处理)的类型。如果未在@Produces中指定该类型,则服务器无法处理该类型,并且客户端会收到错误消息。例如

@Produces("application/json")
...
> GET / HTTP/1.1
> Accept: application/json

< 200 OK
{ "json" : "data" }


@Produces("application/json")
...
> GET / HTTP/1.1
> Accept: application/xml

< 406 Not Acceptable