@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. Второй запрос отправляет 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
Отлично! Большое спасибо ясный и подробный ответ. –