javax.ws.rs MediaType - Принять заголовок
@Consumes
так же как @Produces
, оба принимают тип носителя. Accept Header в запросе соответствует какой аннотации?
В большинстве примеров (например, как работать с accept-параметрами при разработке приложения jax-rs) показано использование @Produces
принять заголовок из запроса клиента.
1 ответ
@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
, так что он получает хороший ответ. Второй запрос, он отправляет данные 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