Spring 4 mvc restful
2018-03-28 20:47 yczxf 阅读(432) 评论(0) 收藏 举报第一篇基本搬运自:
http://websystique.com/springmvc/spring-mvc-4-restful-web-services-crud-example-resttemplate/
首先创建一个maven工程并转换为web module 3.0版本。
一、基础环境
1、创建Maven web工程
new-->New Maven Project,选择maven webapp,信息填写完整。

2、修改jdk版本,转为web module 3.0(非必须)
在pom.xml的build-plugins里添加编译环境

删除原有的web.xml,因为web.xml不是3.0的格式。同时设置打包位置及打包war名称。在pom.xml里配置:

设置完成后,update项目:maven--》update-project。
update后,转换web module版本。定位到项目的Maven -Project Facets 里,先去掉 Dynamic Web Module 2.5前的选择,点击Apply,确认。然后再次打开勾选3.0,勾选上,再应用apply即可。项目至此已转为web module 3.0了。

到这一步,可以运行看看是否成功~如看到hello ,world即成功了。

二、集成spring MVC
1、在pom.xml里添加spring 依赖及json转换器包依赖如下。这里采用spring 4.2和2.5.3的jackson

2、在src/main/java里建立model,controller,service 等包,结构大概如下


现在创建一个student类、对应的service及实现和controller
A:student类
package com.blue.datacenter.model;
public class Student {
private long id;
private String name;
private int age;
private String describ;
public Student(){
id=0;
}
public Student(long id,String name,int age,String describ){
this.id=id;
this.name=name;
this.age=age;
this.describ=describ;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getDescrib() {
return describ;
}
public void setDescrib(String describ) {
this.describ = describ;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + ", describ=" + describ + "]";
}
}
B:service
package com.blue.datacenter.service;
import java.util.List;
import com.blue.datacenter.model.Student;
public interface StudentService {
Student findById(long id);
Student findByName(String name);
void saveStudent(Student student);
void updateStudent(Student student);
void deleteStudentById(long id);
List<Student> findAllStudents();
void deleteAllStudents();
public boolean isStudentExist(Student student);
}
C:实现,这里没有用到数据,所以采用静态生成数据。
package com.blue.datacenter.service.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.blue.datacenter.model.Student;
import com.blue.datacenter.service.StudentService;
@Service
@Transactional
public class StudentServiceImpl implements StudentService {
private static final AtomicLong counter = new AtomicLong();
private static List<Student> students;
static{
students= populateDummyStudents();
}
private static List<Student> populateDummyStudents(){
List<Student> users = new ArrayList<Student>();
users.add(new Student(counter.incrementAndGet(),"张三",3, "1st students..."));
users.add(new Student(counter.incrementAndGet(),"李四",4, "2st students..."));
users.add(new Student(counter.incrementAndGet(),"王五",5, "3st students..."));
users.add(new Student(counter.incrementAndGet(),"李飞刀",7, "4st students..."));
return users;
}
@Override
public Student findById(long id) {
for(Student stu : students){
if(stu.getId() == id){
return stu;
}
}
return null;
}
@Override
public Student findByName(String name) {
for(Student stu : students){
if(stu.getName().equals(name)){
return stu;
}
}
return null;
}
@Override
public void saveStudent(Student student) {
student.setId(counter.incrementAndGet());
students.add(student);
}
@Override
public void updateStudent(Student student) {
int index = students.indexOf(student);
students.set(index, student);
}
@Override
public void deleteStudentById(long id) {
for (Iterator<Student> iterator = students.iterator(); iterator.hasNext(); ) {
Student stu = iterator.next();
if (stu.getId() == id) {
iterator.remove();
}
}
}
@Override
public List<Student> findAllStudents() {
return students;
}
@Override
public void deleteAllStudents() {
students.clear();
}
@Override
public boolean isStudentExist(Student student) {
return findByName(student.getName())!=null;
}
}
D:controller,可以说是action?
package com.blue.datacenter.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;
import com.blue.datacenter.model.Student;
import com.blue.datacenter.service.StudentService;
@RestController
public class StudentController {
@Autowired
private StudentService studentService;
//-------------------Retrieve All Students--------------------------------------------------------
@RequestMapping(value = "/Student", method = RequestMethod.GET)
public ResponseEntity<List<Student>> listAllStudents() {
List<Student> Students = studentService.findAllStudents();
if(Students.isEmpty()){
return new ResponseEntity<List<Student>>(HttpStatus.NO_CONTENT);//You many decide to return HttpStatus.NOT_FOUND
}
return new ResponseEntity<List<Student>>(Students, HttpStatus.OK);
}
//-------------------Retrieve Single Student--------------------------------------------------------
@RequestMapping(value = "/Student/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Student> getStudent(@PathVariable("id") long id) {
System.out.println("Fetching Student with id " + id);
Student Student = studentService.findById(id);
if (Student == null) {
System.out.println("Student with id " + id + " not found");
return new ResponseEntity<Student>(HttpStatus.NOT_FOUND);
}
return new ResponseEntity<Student>(Student, HttpStatus.OK);
}
//-------------------Create a Student--------------------------------------------------------
@RequestMapping(value = "/Student/", method = RequestMethod.POST)
public ResponseEntity<Void> createStudent(@RequestBody Student Student, UriComponentsBuilder ucBuilder) {
System.out.println("Creating Student " + Student.getName());
if (studentService.isStudentExist(Student)) {
System.out.println("A Student with name " + Student.getName() + " already exist");
return new ResponseEntity<Void>(HttpStatus.CONFLICT);
}
studentService.saveStudent(Student);
HttpHeaders headers = new HttpHeaders();
headers.setLocation(ucBuilder.path("/Student/{id}").buildAndExpand(Student.getId()).toUri());
return new ResponseEntity<Void>(headers, HttpStatus.CREATED);
}
//------------------- Update a Student --------------------------------------------------------
@RequestMapping(value = "/Student/{id}", method = RequestMethod.PUT)
public ResponseEntity<Student> updateStudent(@PathVariable("id") long id, @RequestBody Student Student) {
System.out.println("Updating Student " + id);
Student currentStudent = studentService.findById(id);
if (currentStudent==null) {
System.out.println("Student with id " + id + " not found");
return new ResponseEntity<Student>(HttpStatus.NOT_FOUND);
}
currentStudent.setName(Student.getName());
currentStudent.setAge(Student.getAge());
currentStudent.setDescrib(Student.getDescrib());
studentService.updateStudent(currentStudent);
return new ResponseEntity<Student>(currentStudent, HttpStatus.OK);
}
//------------------- Delete a Student --------------------------------------------------------
@RequestMapping(value = "/Student/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Student> deleteStudent(@PathVariable("id") long id) {
System.out.println("Fetching & Deleting Student with id " + id);
Student Student = studentService.findById(id);
if (Student == null) {
System.out.println("Unable to delete. Student with id " + id + " not found");
return new ResponseEntity<Student>(HttpStatus.NOT_FOUND);
}
studentService.deleteStudentById(id);
return new ResponseEntity<Student>(HttpStatus.NO_CONTENT);
}
//------------------- Delete All Student --------------------------------------------------------
@RequestMapping(value = "/Student/", method = RequestMethod.DELETE)
public ResponseEntity<Student> deleteAllStudents() {
System.out.println("Deleting All Students");
studentService.deleteAllStudents();
return new ResponseEntity<Student>(HttpStatus.NO_CONTENT);
}
}
这些代码原理都可以在开篇的链接中查看。
3、建立spring-mvc.xml和web.xml(从其他3.0的项目拷贝web.xml格式)
在src/main/java里新建一个包,名字为config(随意)。在包下新建spring-mvc.xml和web.xml
spring-mvc.xml
<?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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">
<!-- 注解扫描包 -->
<context:component-scan base-package="com.blue.datacenter" />
<!-- 开启注解 -->
<mvc:annotation-driven />
<!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 将外部请求地址映射为内部实际物理地址 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
web.xml 3.0版本
<?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">
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring-mvc.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>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
至此,spring和web配置完成。
三、运行
经过第一、二步,已经完成了spring mvc restful的的最基本、最简单的配置,下面可以尝试运行了。右键项目-run as --》run on server,如果没有此项,请在build path里添加 server runtime,选择tomcat 7.0

加载时,可以在输出console窗口里查看到加载了controller的路径了。

接着,在浏览器里输入地址,可以查看到结果。


浙公网安备 33010602011771号