Java-клиент выбрасывает исключение неподдерживаемого медиа-типа - PullRequest
0 голосов
/ 15 марта 2011

Я разрабатываю приложение, которое использует restful api. Клиент Java, отправляющий запрос на автономный сервер, генерирует исключение Unsupported Media Type. Код клиента выглядит следующим образом

StringBuilder xml = new StringBuilder();
                xml.append("<?xml version=\"1.0\" encoding=\"${encoding}\"?>").append("\n");
                xml.append("<root>").append("\n");
                xml.append("<user>").append("\n");
                xml.append("<username>"+username+"</username>");
                xml.append("\n");
                xml.append("<password>"+pass+"</password");
                xml.append("\n");
                xml.append("</user>");
                xml.append("</root>");
                Representation representation = new StringRepresentation(xml.toString());
                new ClientResource("http://localhost:7777/Auth").post(representation);

Код сервера выглядит следующим образом

new Server(Protocol.HTTP,7777,TestServer.class).start();
String username = (String) getRequest().getAttributes().get("username");
        String password=(String) getRequest().getAttributes().get("password");
        StringRepresentation representation = null; 

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

Вы не передаете заголовок типа контента;Я настоятельно рекомендую использовать API, такой как Apache Common HttpClient, для создания таких запросов (и, возможно, прочитать содержимое из файла).

0 голосов
/ 24 марта 2011

@ Riccardo верен, ресурс Restlet на сервере проверяет заголовок Content-Type запроса клиента, чтобы убедиться, что объект, который вы отправляете на сервер, имеет тип, который он может поддерживать. Вот пример Restlet 1.1 . Вы заметите, что этот ресурс настроен на ожидание XML:

// Declare the kind of representations supported by this resource.  
getVariants().add(new Variant(MediaType.TEXT_XML));  

Так что, возможно, ваша серверная сторона не объявляет представления, которые она может обработать, или это происходит, и автоматическое согласование типа мультимедиа Restlet обнаруживает, что ваш запрос не имеет установленного Content-Type: text / xml (или application / xml) .

Таким образом, как рекомендует @Riccardo, используйте Apache HttpClient и вызовите HttpRequest.setHeader («Content-Type», «text / xml») или используйте API библиотеки клиента Рестлета для этого (он добавляет еще один уровень абстракции поверх HTTP-коннектор клиента, такой как Apache HttpClient).

...