0

@Consumes以及@Produces,都接受 Media 类型。请求中的Accept Header对应哪个注解?

在大多数示例中(例如,在开发 jax-rs 应用程序时如何处理接受参数)它显示了@Produces用于接受来自客户端请求的标头。

4

1 回答 1

2

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

@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 响应。第二个请求,它发送一个Content-Type不支持的 XML 数据,所以它得到一个 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
于 2016-01-07T02:20:26.980 回答