تقبل خدمة الويب REST POST باستخدام Restlet - أفضل الممارسات

StackOverflow https://stackoverflow.com/questions/440989

سؤال

لدي الموارد الخاصة بي وهم طريقة تجاوز نموذجية للتعامل مع طلبات POST.

public void acceptRepresentation(Representation rep) {

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

ما أريد معرفته هو أفضل ممارسة للتعامل مع حزمة XML الخاصة بي.أرى الكثير من الأمثلة باستخدام النموذج - ولكن من المؤكد أن هناك طريقة للعمل مع كائن التمثيل نفسه أو تحويله إلى كائن XML مفيد؟؟؟

أي مساعدة حول كيفية القيام بتحليل XML الوارد في المورد الخاص بك هي محل تقدير كبير.

هل كانت مفيدة؟

المحلول

هذا هو أكثر من نوع الاستجابة التي كنت أبحث عنها.شكرا ل تييري بوالو للإجابة:

يمكنك استخدام نوعين من "تمثيلات XML":التمثيل الدومري والتمثيل الساكسري.يمكنك إنشاء مثيل لهما مع التمثيل المنشور.على سبيل المثال:DomRepresentation XmlRep = New DomRepresentation (Rep) ؛

يمنحك DomRepresentation الوصول إلى مستند DOM.يتيح لك SaxRepresentation تحليل مستند XML باستخدام ContentHandler الخاص بك.انظر Javadocs هنا 1 وهنا 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

نصائح أخرى

ونحن نفعل في هذا باستخدام RESTeasy، وهو تنفيذ البديل JAX-RS. نحن نستخدم الارتباطات JAXB (شروح) لتعيين بين XML وPOJOs نموذجنا، وتحديد مزود JAXB إلى JAX-RS لذلك يعرف كيف. يوصف هذا في خدمات الإنترنت في جاوة EE مع RESTEasy (JAX-RS) المقالة ، مما قد يساعد.

تحديث: لRestlet، و JAXB قد يكون تمديد ما تحتاجه.

ومن خلال طريقة representation.getText()، يمكنك الحصول على سلسلة التي يمكن إدخالها محلل SAX أو قارئ دوم.

@ سيمون إي

لا أفهم:ما هو تطبيق 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.representation.*

بأي حال من الأحوال ، أود أن أقدم لكم النصيحة لاستخدام Jax-RS بدلاً من تطبيقات بديلة ، لأن Jax-RS ستكون جزءًا من القادم جافا إي إي 6

هل هذا هو نفس الإجراء حتى في restlet 2.0 ؟؟

وأنا استخدم 2.0m6 restlet وهنا مقتطف شفرة أن أستعمل -

وPost

وعملية التمثيل العامة (كيان التمثيل)

{

والمحاولة

{

وDomRepresentation دوم = جديد DomRepresentation (كيان)؛

وثيقة د = dom.getDocument ()؛

و} صيد (استثناء ه)

{e.printStackTrace ()؛ }

وويلقي استثناء خالية المؤشر عند خط dom.getDocument (). وهو ما يعني عدم وجود بيانات وصلت فعلا.

ويبدو لي قليلا من العطف مثل هذا - خدمة فار: HTTPService = HTTPService جديدة ()؛ service.method = "POST". service.contentType = "التطبيق / أكس" service.url = رابط. فار رمز: AsyncToken = service.send (بارامس)؛

وحيث بارامس هو كائن XML.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top