Предположим, что у нас есть некоторые 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 */
}
Возможно, я не чувствую разницы, потому что я всего лишь один потребитель моего API ... Но «публичный» потребитель должен знать структуру JSON, возвращенную с сервера, поэтому любой, кто использует этот API, должен знать/ожидать JSON. Это правда? Является ли этот Content-Type только для дополнительной проверки, если сервер, например. что-то изменит в API и использует какой-то другой формат данных? – flyer
@flyer Да Content-Type позволяет потребителю вашего веб-сервиса решить, как его использовать. Поскольку веб-служба может создавать различное содержимое, например json или xml. Теперь, как потребитель решит, какой парсер он должен использовать для анализа ответа. Таким образом, потребитель будет заглядывать в заголовок типа контента и затем будет получать парсер, чтобы потреблять ответ. –