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
Другие вопросы по тегам