前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 4 MVC @RestController 注解实现REST Service(带源码)

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

作者头像
明明如月学长
发布2021-08-27 15:26:14
7880
发布2021-08-27 15:26:14
举报
文章被收录于专栏:明明如月的技术专栏

原文地址: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 添加需要的依赖
代码语言:javascript
复制
    4.0.0
    com.websystique.springmvc
    Spring4MVCHelloWorldRestServiceDemo
    war
    1.0.0
    Spring4MVCHelloWorldRestServiceDemo Maven Webapp
 
    
        4.0.6.RELEASE
    
 
    
        
            org.springframework
            spring-core
            ${springframework.version}
        
        
            org.springframework
            spring-web
            ${springframework.version}
        
        
            org.springframework
            spring-webmvc
            ${springframework.version}
        
 
        
            javax.servlet
            javax.servlet-api
            3.1.0
        
        
            javax.servlet.jsp.jstl
            jstl-api
            1.2
        
        
            javax.servlet.jsp
            javax.servlet.jsp-api
            2.3.1
        
 
        
            org.codehaus.jackson
            jackson-mapper-asl
            1.9.13
        
    
 
 
    
        
            
                
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    3.2
                    
                        1.6
                        1.6
                    
                
                
                    org.apache.maven.plugins
                    maven-war-plugin
                    2.4
                    
                        src/main/webapp
                        Spring4MVCHelloWorldRestServiceDemo
                        false
                    
                
            
        
 
        Spring4MVCHelloWorldRestServiceDemo

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

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

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

目前是2.5.3

代码语言:javascript
复制
    com.fasterxml.jackson.core
    jackson-databind
    2.5.3
第3步: 添加一个Pojo/domain对象
代码语言:javascript
复制
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下添加控制器

代码语言:javascript
复制
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步: 添加配置类
代码语言:javascript
复制
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步:添加初始化类
代码语言:javascript
复制
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("/");
    }
 
}

可以用下面的例子代替:

代码语言:javascript
复制
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注解在模型类上即可实现。

代码语言:javascript
复制
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

特别说明:此系列教程有的童鞋下载下来运行 经常404 或者改成xml方式以后

缺少org.springframework.web.context.ContextLoaderServlet

参见:http://blog.csdn.net/w605283073/article/details/52126347

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/05/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第1步: 创建项目结构
  • 第2步:修改 pom.xml 添加需要的依赖
  • 第3步: 添加一个Pojo/domain对象
  • 第4步: 添加控制器
  • 第5步: 添加配置类
  • 第6步:添加初始化类
  • 第7步: 创建和发布应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档