Demostración de práctica RESTful de SpringMVC

1. REST es un estilo de arquitectura de servicios web, no una tecnología. Si una arquitectura se ajusta a los principios REST, se denomina arquitectura RESTful.

La arquitectura de estilo RESTful tiene que ver con el funcionamiento de los recursos. Todos los recursos deben ser sustantivos en lugar de verbos.

Crear un recurso: POST para 
recuperar un recurso: GET para
actualizar un recurso: PUT para 
eliminar un recurso: DELETE 

El siguiente es un ejemplo para demostrar cómo usar solicitudes HTTP para manipular recursos.

OBTENER: / los estudiantes devolverán toda la información del estudiante

GET:   / Students / 101 devolverá la información del estudiante con id 101 

POST: / Students / 101 creará nueva información del estudiante con id 101 

PUT:   / Students / 101 actualizará la información del estudiante con id 101 

ELIMINAR:   / estudiantes / 101 eliminará la información del estudiante con la identificación 101 


2. El archivo pom.xml es el siguiente:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.example</groupId>
	<artifactId>SpringMVC_RESTful</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>SpringMVC_RESTful Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.1.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>4.3.1.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.1.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.3.1.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>4.1.6.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.5.0</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>SpringMVC_RESTful</finalName>
	</build>
</project>


2. El archivo web.xml es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/springmvc-servlet.xml</param-value>
      </init-param>
      <!-- <load-on-startup>1</load-on-startup> -->
</servlet>
 
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>


3. El archivo springmvc-servlet.xml es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">

	<!-- 启用spring mvc 注解 -->
	<context:annotation-config />
	<!-- scan the package and the sub package -->
	<context:component-scan base-package="com.example" />

   <!-- if you use annotation you must configure following setting -->
	<mvc:annotation-driven />
	<!-- 完成请求和注解POJO的映射 -->
	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
	<!-- configure the InternalResourceViewResolver 一种试图解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		id="internalResourceViewResolver">

		<property name="prefix" value="/WEB-INF/"/>

		<property name="suffix" value=".jsp" />
	</bean>
</beans>


4. Clase de entidad

package com.example.model;

public class Student { private long id; private String name; private String sex; public Student() { } public Student( String name, String sex) { super(); this.name = name; this.sex = sex; } public Student(long id, String name, String sex) { super(); this.id = id; this.name = name; this.sex = sex; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }

 

5.DAO

package com.example.dao;

import java.util.List;

import com.example.model.Student;

public interface StudentDao {
	public Student addStudent(Student student);
	public long deleteStudent(Long id);
	public Student queryOneStudent(Long id);
	public Student changeStudent(Student student);
	public List<Student> getStudentList();
}


6.EstudianteDaoImpl

package com.example.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import com.example.dao.StudentDao;
import com.example.model.Student;

@Repository("studentDao")
public class StudentDaoImpl implements StudentDao {
	
	private static List<Student> students;
	{
		students = new ArrayList<Student>();
		students.add(new Student(101, "Mike", "male"));
		students.add(new Student(102, "Huang", "male"));
		students.add(new Student(103, "Mao", "female"));
	}

	public Student addStudent(Student student) {
		//student.setId(System.currentTimeMillis());
		students.add(student);
		return student;
	}

	public long deleteStudent(Long id) {
		for (Student student : students) {
			if (student.getId() == id){
				students.remove(student);
				return id;
			}
		}
		return id;
	}

	public Student queryOneStudent(Long id) {
		for (Student student : students) {
			if (student.getId() == id){
				return student;
			}
		}
		return null;
	}

	public Student changeStudent(Student student) {
		for (Student s : students) {
			if (s.getId() == student.getId()){
				return student;
			}
		}
		return null;
	}

	public List<Student> getStudentList() {
		return students;
	}

}


7. Capa de control, aquí corresponderá al método de solicitud HTTP, seleccione el método en RequestMethod y marque la identificación con la anotación @PathVariable.

package com.example.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import com.example.dao.StudentDao;
import com.example.model.Student;


@RestController()
public class StudentController {
	
	@Autowired
	private StudentDao studentDao;
	
	@RequestMapping(value = "/students", method = RequestMethod.GET)
	@ResponseBody
	public List<Student> getStudentList() {
		List<Student> students = studentDao.getStudentList();
		return students;
	}
	
	@RequestMapping(value = "/students/{id}", method = RequestMethod.GET)

	public ResponseEntity<Student>  queryOneStudent(@PathVariable("id") long id) {
		Student student = studentDao.queryOneStudent(id);
		return new ResponseEntity<Student>(student,HttpStatus.OK);
	}
	
	@RequestMapping(value = "/students/{id}", method = RequestMethod.DELETE)
	public ResponseEntity<Long> deleteStudent(@PathVariable("id") long id) {
		long showId = studentDao.deleteStudent(id);
		return new ResponseEntity<Long>(showId,HttpStatus.OK);
	}
	
	@RequestMapping(value = "/students/{id}", method = RequestMethod.POST)
	public ResponseEntity<Student> addStudent(@PathVariable("id") long id) {
		Student student = new Student(id,"rex", "male");
		student = studentDao.addStudent(student);
		return new ResponseEntity<Student>(student,HttpStatus.OK);
	}
	
	@RequestMapping(value = "/students/{id}", method = RequestMethod.PUT)
	public ResponseEntity<Student> changeStudent(@PathVariable("id") long id) {
		Student student = new Student(id,"leona", "female");
		student = studentDao.changeStudent(student);
		return new ResponseEntity<Student>(student,HttpStatus.OK);
	}
	
}

8. Utilice la aplicación de extensión POSTMAN del navegador de Google para probar, puede elegir el método de solicitud de manera muy conveniente.





Supongo que te gusta

Origin blog.csdn.net/u010857795/article/details/54377196
Recomendado
Clasificación