Spring 4 MVC @RestController 注解实现REST Service(带源码)

原文地址:http://websystique.com/springmvc/spring-4-mvc-rest-service-example-using-restcontroller/

【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】

【翻译 by 明明如月 QQ 605283073】

上一篇:Spring
4 MVC 视图解析器(XML JSON PDF等) 纯注解

下一篇:Spring MVC 4 RESTFul Web Services CRUD例子(带源码)【这才是restful,超经典】

本文,我们将介绍使用Spring 4 @RestController 
注解实现基于RESTful JSON的 Spring 4 MVC 例子。

我们将对其进行拓展不仅支持JSON还将支持XML,只需要在POJO上简单加上JAXB注解即可。

在URL末尾加上 .json 或者 .xml获得想要的格式。

---------------------------------

使用的技术或者软件

  • Spring 4.0.6.RELEASE
  • jackson-mapper-asl 1.9.13
  • Maven 3
  • JDK 1.6
  • Tomcat 7.0.54
  • Eclipse JUNO Service Release 2

第1步: 创建项目结构

采用maven创建项目,不会的参考前面的文章

本文将采用纯注解的方式

第2步:修改 pom.xml 添加需要的依赖

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.websystique.springmvc</groupId>
    <artifactId>Spring4MVCHelloWorldRestServiceDemo</artifactId>
    <packaging>war</packaging>
    <version>1.0.0</version>
    <name>Spring4MVCHelloWorldRestServiceDemo Maven Webapp</name>

    <properties>
        <springframework.version>4.0.6.RELEASE</springframework.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <warSourceDirectory>src/main/webapp</warSourceDirectory>
                        <warName>Spring4MVCHelloWorldRestServiceDemo</warName>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

        <finalName>Spring4MVCHelloWorldRestServiceDemo</finalName>
    </build>
</project>

配置和以前一样只是加了Jackson library(jackson-mapper-asl)
用来转换响应的数据成json 字符串。

Spring
4.1.x或者更高版本, 推荐使用jackson-databind 2.3 或者更高版本,来避免转换出现各种问题.详情参见:这里

为了安全起见,你可以添加jackson-databind库的最新版本

目前是2.5.3

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.3</version>
</dependency>

第3步: 添加一个Pojo/domain对象

package com.websystique.springmvc.domain;

public class Message {

    String name;
    String text;

    public Message(String name, String text) {
        this.name = name;
        this.text = text;
    }

    public String getName() {
        return name;
    }

    public String getText() {
        return text;
    }

}

此对象将从控制器返回并被jackson转换为JSON格式

第4步: 添加控制器

在src/main/java下添加控制器

package com.websystique.springmvc.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.websystique.springmvc.domain.Message;

@RestController
public class HelloWorldRestController {

    @RequestMapping("/hello/{player}")
    public Message message(@PathVariable String player) {

        Message msg = new Message(player, "Hello " + player);
        return msg;
    }

}

@PathVariable添加这个参数将绑定 URI
模板. 需要注意的是使用了=@RestController 注解,
表明本类作为一个控制器,返回的是一个domain/pojo对象而不是视图. 这就意味着,不再使用视图解析器,响应中不再发送html数据,而是发送domain对象的特定形式。在本例中是JSON
格式
.

第5步: 添加配置类

package com.websystique.springmvc.configuration;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.websystique.springmvc")
public class HelloWorldConfiguration {

}

这里没添加视图解析器

第6步:添加初始化类

package com.websystique.springmvc.configuration;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class HelloWorldInitializer implements WebApplicationInitializer {

    public void onStartup(ServletContext container) throws ServletException {

        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(HelloWorldConfiguration.class);
        ctx.setServletContext(container);

        ServletRegistration.Dynamic servlet = container.addServlet(
                "dispatcher", new DispatcherServlet(ctx));

        servlet.setLoadOnStartup(1);
        servlet.addMapping("/");
    }

}

可以用下面的例子代替:

package com.websystique.springmvc.configuration;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class HelloWorldInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { HelloWorldConfiguration.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}

第7步: 创建和发布应用

json输出

适配XML格式输出:

只需要添加JAXB注解在模型类上即可实现。

package com.websystique.springmvc.domain;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "pizza")
public class Message {

    String name;
    String text;

    public Message(){

    }

    public Message(String name, String text) {
        this.name = name;
        this.text = text;
    }

    @XmlElement
    public String getName() {
        return name;
    }

    @XmlElement
    public String getText() {
        return text;
    }

}

编译重新发布

这样访问就需要带上拓展名

如果不带任何拓展名 默认是XML格式

项目下载地址:http://websystique.com/?smd_process_download=1&download_id=765

时间: 2024-08-06 11:57:11

Spring 4 MVC @RestController 注解实现REST Service(带源码)的相关文章

Spring 4 MVC 视图解析器(XML JSON PDF等) 纯注解(带源码)【推荐】

原文地址:http://websystique.com/springmvc/spring-4-mvc-contentnegotiatingviewresolver-example/ [本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看.源码下载地址在文章末尾.] [翻译 by 明明如月 QQ 605283073] 下一篇:Spring 4 MVC @RestController 注解实现REST Service 上一篇:Spring 4 MVC 表单校验资源处理(带源码)

Spring MVC 4 RESTFul Web Services CRUD例子(带源码)【这才是restful,超经典】

[本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看.源码下载地址在文章末尾.] [翻译 by 明明如月 QQ 605283073] 原文地址:http://websystique.com/springmvc/spring-mvc-4-restful-web-services-crud-example-resttemplate/ 上一篇: Spring 4 MVC @RestController 注解实现REST Service 下一篇:Spring MVC 4 文件上传

Spring 4 MVC HelloWorld 纯注解方式(带源码)【超赞】

[本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看] [翻译 by 明明如月 QQ 605283073] #项目下载地址:http://websystique.com/?smd_process_download=1&download_id=1722#. 上一篇:Spring 4 MVC hello world 教程-完全基于XML(带项目源码) 下一篇: Spring 4 MVC 表单校验资源处理(带源码) 在上一个例子:Spring 4 MVC hello world

Spring MVC 4使用Servlet 3 MultiPartConfigElement实现文件上传(带源码)

[本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看.源码下载地址在文章末尾.] [翻译 by 明明如月 QQ 605283073] 原文地址:http://websystique.com/springmvc/spring-mvc-4-file-upload-example-using-multipartconfigelement/ 上一篇:Spring MVC 4 使用常规的fileupload上传文件(带源码) 下一篇:Spring MVC 4 文件下载实例(带源码)

Spring Security 4 Hibernate整合 注解和xml例子(带源码)

[相关已翻译的本系列其他文章,点击分类里面的spring security 4] [ 翻译by 明明如月 QQ 605283073] 上一篇文章:Spring Security 4 基于角色的登录例子(带源码) 下一篇文章:Spring Security 4 整合Hibernate Bcrypt密码加密(带源码) 原文地址:http://websystique.com/spring-security/spring-security-4-hibernate-annotation-example/

Spring 4 MVC 表单校验资源处理(带源码)

[本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看] [翻译 by 明明如月 QQ 605283073] 上一篇:Spring 4 MVC HelloWorld 纯注解方式(带源码) 下一篇文章:Spring 4 MVC 视图解析器(XML JSON PDF等) 纯注解 #项目下载地址:http://websystique.com/?smd_process_download=1&download_id=1258# 本文我们将学习使用Spring 表单标签( Spring

Spring MVC 4 文件下载实例(带源码)

[本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看.源码下载地址在文章末尾.] [翻译 by 明明如月 QQ 605283073] 原文地址:http://websystique.com/springmvc/spring-mvc-4-file-download-example/ 上一篇:Spring MVC 4 使用常规的fileupload上传文件(带源码) 本文将为你展示通过Spring MVC 4实现文件下载. 下载一个文件比较简单,主要包括下面几个步骤. 创建下

Spring MVC 4 使用常规的fileupload上传文件(带源码)

[本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看.源码下载地址在文章末尾.] [翻译 by 明明如月 QQ 605283073] 上一篇: Spring MVC 4 文件上传下载 Hibernate+MySQL例子 (带源码) 原文地址:http://websystique.com/springmvc/spring-mvc-4-file-upload-example-using-commons-fileupload/ 本文将实现使用SpringMultipartRes

Spring Security 4 基于角色的登录例子(带源码)

原文网址: http://websystique.com/spring-security/spring-security-4-role-based-login-example/ [相关已翻译的本系列其他文章,点击分类里面的spring security 4] [翻译by 明明如月 QQ 605283073] 上一篇: Spring Security 4 安全视图片段 使用标签(Spring Security 标签) 下一篇: Spring Security 4 Hibernate整合 注解和xm