جيرسي REST وPathParam التعبيرات العادية
-
26-12-2019 - |
سؤال
أحاول استخدام Jersey لتطوير خدمة ويب REST.متطلباتي هي أن أتمكن من الوصول إلى خدمة الويب وإرجاع البيانات، بناءً على معلمات PatParam التي تم تمريرها.خدمة الويب الخاصة بي حتى الآن هي كما يلي:
@GET
@Produces(MediaType.APPLICATION_JSON)
@Consumes({ "application/xml", "application/json", "application/x-www-form-urlencoded" })
@Path("/1.0/people{extension:(.json)*}/{personId:([^/]+?)?}{entityExtension:(.json)*}")
public String getLocation(@PathParam("extension") String extension, @PathParam("personId") String personId,@PathParam("entityExtension") String entityExtension)
{
if ((personId==null ||personId.equals("")) && (extension == null || extension.equals("")))
return "No Id, and no extension";
else
return "personId= "+personId + ", extension= " + extension+", entityExtension= "+entityExtension;
}
مع وضع الكود أعلاه في الاعتبار، ما أحاول تحقيقه هو ما يلي:
http://localhost:8080/Jersey/RestService/1.0/people.json
يجب إرجاع قائمة بجميع الأشخاص بتنسيق "json" (وبالتالي الامتداد .json)
الآن، أريد أن أكون قادرًا على الحصول على المعلومات الخاصة بشخص معين بمجرد وضع معرف الشخص وإرجاع معلومات الشخص بتنسيق json/xml استنادًا إلى الامتداد:
http://localhost:8080/Jersey/RestService/1.0/people/Mouhammed89.json
باستخدام عنوان URL أعلاه، يجب أن أقوم بإرجاع المعلومات الخاصة بمعرف الشخص:Mouhammed89، وإرجاع المعلومات بصيغة json.
أعلم أن مشكلتي تكمن في التعبيرات العادية التي أستخدمها، لذا سأقدر حقًا المساعدة في إنشائها.
المحلول
حاوية إيمهو (List
) والبند (Person
) URL
ينبغي التعامل معها بشكل منفصل.ولا تحتاج إلى صريحة .json
بادئة للعودة JSON
الرد، فقط الشرح في API
ينبغي أن يكون المستوى كافيا.
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/1.0/people") //no need for .json suffix as API only return JSON format
public List<String> allLocations(..){ //jackson etc. will convert return type to json string
..
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/1.0/people/{personId: \\d+}")//digits only
public String getLocation(..){ //jackson etc. will convert return type to json string
..
}