#java #rest #encoding #chunked
#java #rest #кодирование #фрагментированное
Вопрос:
Я пытаюсь прочитать некоторую информацию с помощью REST-сервиса, который использует чанковое кодирование.
String encodedURL = URLEncoder.encode(url, "UTF-8");
WebClient client = org.apache.cxf.jaxrs.client.WebClient.create(encodedURL).accept("text/html");
Response response = client.get();
Ответ содержит статус, метаданные и сущность. Метаданные содержат следующую информацию:
{Дата =[Чт, 13 Окт 2011 13:27:02 GMT], Vary=[Accept-Encoding, User-Agent], Transfer-Encoding=[фрагментированный], Keep-Alive=[тайм-аут = 15, макс = 100], Content-Type=[текст / html;кодировка = кодировка = UTF-8], Соединение = [Сохранить-Живой], X-Pad = [избежать ошибки браузера], Сервер = [Apache / 2.2.3 (Linux / SUSE)]}
и объект содержит экземпляр типа sun.net.www.protocol.http.HttpURLConnection$HTTPInputStream.
В прошлом я использовал следующую строку кода, чтобы получить всю результирующую строку:
String resultString = client.get(String.class);
Но почему-то эта строка выдает исключение:
. Проблема с чтением ответного сообщения, класс: класс java.lang.Строка, тип содержимого : текст / html;кодировка =кодировка= UTF-8. org.apache.cxf.jaxrs.client.Исключение ClientWebApplicationException: .Проблема с чтением ответного сообщения, класс : класс java.lang.Строка, тип содержимого : текст / html;кодировка =кодировка= UTF-8.
… вызвано:
Вызвано: java.io.UnsupportedEncodingException: charset=UTF-8 в sun.nio.cs.StreamDecoder.forInputStreamReader(неизвестный источник) в java.io.InputStreamReader.(Неизвестный источник) в org.apache.cxf.helpers.IOUtils.toString(IOUtils.java:180) в org.apache.cxf.helpers.IOUtils.toString(IOUtils.java:166) в org.apache.cxf.jaxrs.provider.PrimitiveTextProvider.readFrom(PrimitiveTextProvider.java:51) в org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:435) … еще 49
Существует ли простое решение для получения всего содержимого ответа?
Спасибо!
кон
Ответ №1:
Вы можете использовать
@Produces("application/json; charset=UTF-8")
аннотации для служб jax-rs
Ответ №2:
Я боюсь, что серверная сторона отправляет мусор и вызывает выброс исключения на стороне клиента.
Проблемной частью является информация заголовка HTTP типа содержимого. Для него установлено значение:
text/html; charset=charset=UTF-8
Как вы можете видеть, кодировка слова повторяется. Таким образом, ваш клиент пытается декодировать его, используя вызываемую кодировку charset=UTF-8
, которой, конечно, не существует.
Лучшим решением было бы, если бы проблема была устранена на стороне сервера. Но я не знаю, сможете ли вы это исправить. Если нет, следующий лучший подход — попытаться исправить заголовок HTTP, прежде чем пытаться получить содержимое ответа.
Комментарии:
1. Спасибо, Codo! Я как-то полностью пропустил это.