Spring Controller – Spring MVC Controller

التعليق 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