2013-07-23 3 views
0

Предположим, что у нас есть некоторые RESTful ресурс, обслуживающую этот пост:@Produces @Consumes смысл ... JSON или это просто строка

@POST 
@Produces("application/json") 
@Consumes("application/json") 
public String doPostJson(String string) { 
    ... 
} 

(я был в состоянии запустить выше в моем сервере, так что я предполагаю, это действительная реализация)

Теперь я думаю, что doPostJson() получает String и возвращает String. Эта строка может быть чем-то совершенно отличным от допустимой строки JSON. Я прав? Так в чем смысл «application/json», если я могу использовать любую строку здесь?

БОЛЬШЕ: В другой руке, могу ли я просто использовать это?

@POST 
@Produces("text/plain") 
@Consumes("text/plain") 
public String doPostJson(String string) { 
    ... /* read passed parameter as JSON valid string and return JSON string */ 
} 

ответ

3

Produces и Consumes аннотация используется для обмена информации о Content-Type и Accept заголовков соответственно с пользователями веб-сервиса. Заголовок Content-type поможет получателю/потребителю вашей службы обрабатывать ответ в соответствии с информацией в этом заголовке. Если вы помечаете значение заголовка типа контента как application/json, тогда получатель может, соответственно, использовать парсер json. Аналогично, используя Consumes, вы подтверждаете, что заголовок Accept является application/json, чтобы вы могли соответствующим образом разобрать/размонтировать json.

+1

Возможно, я не чувствую разницы, потому что я всего лишь один потребитель моего API ... Но «публичный» потребитель должен знать структуру JSON, возвращенную с сервера, поэтому любой, кто использует этот API, должен знать/ожидать JSON. Это правда? Является ли этот Content-Type только для дополнительной проверки, если сервер, например. что-то изменит в API и использует какой-то другой формат данных? – flyer

+1

@flyer Да Content-Type позволяет потребителю вашего веб-сервиса решить, как его использовать. Поскольку веб-служба может создавать различное содержимое, например json или xml. Теперь, как потребитель решит, какой парсер он должен использовать для анализа ответа. Таким образом, потребитель будет заглядывать в заголовок типа контента и затем будет получать парсер, чтобы потреблять ответ. –

1

«приложение/JSON» является типом пантомимы вы служите вне, увидеть этот родственный вопрос еще нескольких деталей link. Это помогает приложению взаимодействовать с вашим приложением. Они могут полностью отказаться от ответа она должна быть неправильной MimeType, например, изображения/JPEG вместо приложения/JSON

+0

Спасибо за ссылку. Это похоже на большинство обсуждений, которые я когда-либо видел на SO. Мой вопрос больше похож на «как этот параметр помогает моему приложению»? – flyer

+0

обновил мой ответ немного – Zavior

Смежные вопросы