البرمجة

تغيير العنوان الأساسي لمتحكمات REST في Spring Boot

لتغيير عنوان URL الأساسي (base URL) للمتحكمات الخاصة بالاستجابة لطلبات REST فقط في Spring Boot، يمكنك استخدام الإعدادات المتاحة في التكوين الخاص بالتطبيق. ومن الممكن تحقيق هذا من خلال تعديل خيار server.servlet.context-path في ملف تكوين التطبيق application.properties. ولكن، لن يتم تطبيق هذا التغيير على مستوى المتحكمات REST فقط.

لتحقيق تغيير العنوان الأساسي للمتحكمات REST فقط، يمكنك استخدام حلاً مشابهًا لما قمت به في محاولتك السابقة، ولكن بطريقة تتيح لك تحديد المتحكمات التي يجب تطبيق العنوان الأساسي المخصص عليها. على سبيل المثال، يمكنك إنشاء محدد (interceptor) أو مكون (component) يقوم بتعديل العنوان الأساسي بناءً على معيار معين، مثل وجود تعليق (annotation) خاص بالمتحكمات المطلوب تطبيق العنوان الأساسي المخصص عليها.

فيما يلي مثال على كيفية تحقيق هذا باستخدام تعليق خاص (annotation) ومحدد (interceptor) في Spring Boot:

  1. إنشاء تعليق (annotation) خاص بالمتحكمات الخاصة بالراحة (REST controllers) التي تحتاج إلى تطبيق العنوان الأساسي المخصص:
java
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface CustomRestController { }
  1. إنشاء محدد (interceptor) لتطبيق العنوان الأساسي المخصص:
java
@Component public class CustomRequestMappingInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; Class beanType = handlerMethod.getBeanType(); if (beanType.isAnnotationPresent(CustomRestController.class)) { String contextPath = request.getContextPath(); String newPath = contextPath + "/rest"; ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().setAttribute("javax.servlet.forward.request_uri", newPath); } } return true; } }
  1. تكوين المحدد (interceptor) ليتم تطبيقه:
java
@Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private CustomRequestMappingInterceptor customRequestMappingInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(customRequestMappingInterceptor); } }

باستخدام هذا الحل، سيتم تطبيق العنوان الأساسي المخصص “/rest” فقط على المتحكمات التي تحتوي على تعليق @CustomRestController، ولن يتم تطبيقه على المتحكمات الأخرى.

المزيد من المعلومات

بالتأكيد! في هذا الحل، قمنا بالخطوات التالية:

  1. إنشاء تعليق خاص (annotation) يسمى CustomRestController، والذي يمكن استخدامه لتحديد المتحكمات التي تحتاج إلى تطبيق العنوان الأساسي المخصص.

  2. إنشاء محدد (interceptor) يسمى CustomRequestMappingInterceptor، والذي يمكن استخدامه لتعديل عنوان URL الأساسي بناءً على وجود التعليق CustomRestController على المتحكم.

  3. تكوين المحدد (interceptor) ليتم تطبيقه عندما يتم استدعاء المتحكمات.

باستخدام هذا الحل، يمكنك الآن استخدام التعليق @CustomRestController لتحديد المتحكمات التي تريد تطبيق العنوان الأساسي المخصص عليها، وسيقوم المحدد (interceptor) بتعديل العنوان الأساسي بناءً على ذلك قبل أن يتم استدعاء المتحكم.

زر الذهاب إلى الأعلى