Веб-служба REST принимает POST с помощью Restlet - передовая практика

У меня есть свой ресурс и типичный переопределенный метод для обработки запросов POST.

public void acceptRepresentation(Representation rep) {

  if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) {
      //Do stuff here
  }
  else {
      //complain!
  }
}

Я хочу знать, как лучше всего обрабатывать мой пакет XML. Я вижу много примеров использования формы - но, конечно, есть способ работать с самим объектом представления или преобразовать его в какой-нибудь полезный объект XML ???

Любая помощь в том, как вы должны анализировать входящий XML в вашем ресурсе, приветствуется.

Не могли бы вы привести пример того, как вы вызываете остальную веб-службу с сообщением и параметрами. спасибо, Рой

user392366 15.07.2010 10:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
13 213
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

С помощью метода representation.getText() вы можете получить строку, которую можно передать в синтаксический анализатор SAX или читатель dom.

В настоящее время мы делаем это с помощью RESTeasy, альтернативной реализации JAX-RS. Мы используем привязки (аннотации) JAXB для сопоставления между XML и POJO нашей модели и указываем Поставщик JAXB для JAX-RS, чтобы он знал, как это сделать. Это описано в нашем Статья о веб-сервисах RESTful в Java EE с RESTEasy (JAX-RS), что может помочь.

Обновление: для Restlet Расширение JAXB может быть тем, что вам нужно.

Да, потому что Restlet также является реализацией JAX-RS. Извините, я не понял.

Peter Hilton 14.01.2009 01:18
Ответ принят как подходящий

Это скорее тот ответ, который я ожидал. Спасибо Тьерри Буало за ответ:

You can use two kinds of "XML representations": DomRepresentation and SaxRepresentation. You can instantiate both of them with the posted representation. E.g.: DomRepresentation xmlRep = new DomRepresentation(rep);

The DomRepresentation gives you access to the Dom document. The SaxRepresentation allows you to parse the XML doc with your own contentHandler. See the javadocs here 1 and here 2.

  1. http://www.restlet.org/documentation/1.1/api/org/restlet/res​ource/DomRepresentat​ion.html

  2. http://www.restlet.o​rg/documentation/1.1​/api/org/restlet/res​ource/SaxRepresentat​ion.html

@Simon E

Я не понимаю: какую реализацию REST для Java вы используете?

Итак, я просто привожу вам пример использования JAX-RS (реализация Джерси).

Серверная часть (метод некоторого REST-класса):

@POST
@Path("/upload")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public static Response upload(
        @FormParam("name") String name,
        @FormParam("content") String content)
        throws Exception {

    // NOTE: you get your content as String
    // (do something here)

    return Response.ok().build();
}

Клиентская часть (метод некоторого теста JUnit):

@Test
public void uploadFile()
        throws Exception {

    String address = "http://0.0.0.0:8000/r/upload";

    WebResource r = Client.create().resource(address);
    Form form = new Form();
    form.add("name", "test");
    form.add("content", "SOME CONTENT GOES HERE");
    String s = r.post(String.class, form);

    System.out.println(s);
}

Это оно !!!

Если у вас проблемы с импортом:
Серверу нужны javax.ws.rs. * И javax.ws.rs.core. *
Клиенту нужен com.sun.jersey.api.client. * И com.sun.jersey.api.представительство. *

В любом случае, я бы посоветовал вам использовать JAX-RS, а не альтернативные реализации, потому что JAX-RS будет частью предстоящий Java EE 6

Это такая же процедура даже в рестлете 2.0 ??

Я использую restlet 2.0m6, и вот фрагмент кода, который я использую -

@Почта

процесс публичного представительства (представительство)

{

пытаться

{

DomRepresentation dom = новый DomRepresentation (объект);

Документ d = dom.getDocument ();

.

.

} catch (исключение e)

{e.printStackTrace (); }

и генерирует исключение нулевого указателя в строке dom.getDocument (). Это означает, что данные фактически не поступили

А мой гибкий бит выглядит так - var service: HTTPService = new HTTPService (); service.method = "POST"; service.contentType = "приложение / xml" service.url = url; токен var: AsyncToken = service.send (params);

где params - объект XML.

Другие вопросы по теме