التعليق Spring Controller هو تخصص لتعليق @Component. يُستخدم التعليق Spring Controller عادةً بالتزامن مع أساليب المعالج المحددة بتعليق RequestMapping.
Spring Controller
يمكن تطبيق تعليق Spring Controller على الفئات فقط. يُستخدم لتحديد فئة كمعالج لطلبات الويب. يُستخدم بشكل رئيسي مع تطبيق Spring MVC.
Spring RestController
تعليق Spring RestController هو تعليق ملائم يتم تحديده بتعليق @RestController و @Controller و @ResponseBody. يُستخدم هذا التعليق لتحديد فئة كمعالج لطلبات خدمات الويب RESTful.
مثال تحكم الربيع
دعونا ننشئ تطبيق ربيع بسيط حيث سنقوم بتنفيذ تحكم MVC القياسي بالإضافة إلى تحكم REST. قم بإنشاء “مشروع ويب ديناميكي” في Eclipse ثم تحويله إلى مشروع Maven. سيوفر لنا ذلك هيكل تطبيق ويب قائم على مافن ويمكننا بناء تطبيقنا فوقه. توضح الصورة أدناه هيكل المشروع النهائي لتطبيق تحكمنا بتطبيق تحكم Spring MVC. سنحتاج إلى التبعيات التالية لتطبيقنا.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
<!-- Jackson for REST -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
لنلق نظرة على وصف النشر (web.xml) حيث سنقوم بتكوين سيرفلت DispatcherServlet
كمتحكم أمامي.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Spring-Controller</display-name>
<!-- Add Spring MVC DispatcherServlet as front controller -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
وأخيرًا، لدينا ملف سياق ربيع التالي. هنا نقوم بتكوين تطبيقنا ليكون قائمًا على التعليقات وتوفير الحزمة الجذرية لفحص مكونات ربيع. نحن أيضًا نكون InternalResourceViewResolver
ونوفر تفاصيل الصفحات الرئيسية.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="https://www.springframework.org/schema/mvc"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:beans="https://www.springframework.org/schema/beans"
xmlns:context="https://www.springframework.org/schema/context"
xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<context:component-scan base-package="com.journaldev.spring" />
<!-- Resolves views selected for rendering by @Controllers to JSP resources
in the /WEB-INF/views directory -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
</beans:beans>
ملفات تكوين XML الخاصة بنا جاهزة، دعونا ننتقل الآن إلى فئة التحكم.
package com.journaldev.spring.controller;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/hello")
public String home(Locale locale, Model model) {
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate);
return "home";
}
}
لقد قمنا بتعريف طريقة معالجة طلب واحدة فقط، حيث يقبل طلبات GET بعنوان URI “/hello” ويرجع صفحة “home.jsp” كاستجابة. لاحظ أننا نقوم بتعيين سمة للنموذج، والتي سيتم استخدامها في صفحة home.jsp. إليك كود صفحة home.jsp
بسيطتنا.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<p>The time on the server is ${serverTime}.</p>
</body>
</html>
اختبار تحكم Spring MVC
تطبيقنا التقليدي القائم على سيرفلت Spring MVC مع تحكم بسيط جاهز، قم بتصديره كملف WAR ونشره على Tomcat أو أي حاوية سيرفلت أخرى. ثم انتقل إلى عنوان URL https://localhost:8080/Spring-Controller/hello
ويجب أن ترى الشاشة التالية كناتج.
مثال RestController لـ Spring
الآن دعونا نوسع تطبيقنا لنكشف أيضًا عن واجهات برمجة تطبيقات REST. أنشئ فئة نموذجية ستُرسَل كاستجابة JSON.
package com.journaldev.spring.model;
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
إليك فئة تحكم REST بسيطة لدينا.
package com.journaldev.spring.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.journaldev.spring.model.Person;
@RestController
public class PersonRESTController {
@RequestMapping("/rest")
public String healthCheck() {
return "OK";
}
@RequestMapping("/rest/person/get")
public Person getPerson(@RequestParam(name = "name", required = false, defaultValue = "Unknown") String name) {
Person person = new Person();
person.setName(name);
return person;
}
}
أعِد نشر التطبيق مرة أخرى لاختبار واجهات برمجة التطبيقات REST لدينا.
اختبار تحكم Spring REST
اذهب إلى عنوان URL https://localhost:8080/Spring-Controller/rest
ويجب أن تحصل على الناتج التالي. اذهب إلى عنوان URL
https://localhost:8080/Spring-Controller/rest/person/get
وستحصل على استجابة JSON التالية: الآن دعنا نقدم قيمة المعلمة الاسم في عنوان URL، اذهب إلى
https://localhost:8080/Spring-Controller/rest/person/get?name=Pankaj
وستحصل على استجابة JSON التالية.
ملخص
Spring Controller هو عمود فقري تطبيقات Spring MVC. هنا حيث تبدأ منطق أعمالنا. علاوة على ذلك، تساعدنا RestController في إنشاء خدمات ويب قائمة على REST بسهولة.
يمكنك تنزيل رمز المشروع المثال من مستودعنا على GitHub.
Source:
https://www.digitalocean.com/community/tutorials/spring-controller-spring-mvc-controller