2016-01-06 3 views
0

@Consumes а также @Produces, оба типа носителя. Принять Заголовок в запросе соответствует аннотация?javax.ws.rs MediaType - Accept Header

В большинстве примеров (например, How to deal with accept-parameters when developing a jax-rs application) он показывает использование @Produces для принятия заголовка из запроса клиента.

ответ

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. Второй запрос отправляет 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 
+0

Отлично! Большое спасибо ясный и подробный ответ. –