5分钟用Spring4 搭建一个REST WebService(转)

章节目录

  • 前置技能
  • 新建项目,配置依赖文件
  • 编写Model和Controller
  • 启动服务&访问
  • 但是
  • 其他

前置技能

使用maven来管理java项目

这个技能必须点一级,以便快速配置项目。

本文实际上是我学习Spring的过程中搬的官网上的demo,使用maven配置项目。

② jdk 1.8+   该服务demo需要在jdk1.8+的环境下运行

新建项目,配置依赖文件

① 安装好eclipse的maven插件后,使用file——new——other——maven——maven project 新建一个空的maven项目。

② 访问Spring官网demo http://spring.io/guides/gs/rest-service/

将Build With Maven 模块中提供的pom内容复制到我们自己的pom文件中,注意将项目坐标替换成上图中的配置。

最终得到pom文件:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sogou.testspring</groupId>
  <artifactId>testspring-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.5.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-milestone</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestone</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

编写Model和Controller

在source目录 src/main/java下新建hello包,在hello包下新建

① Greeting.java

package hello;

public class Greeting {

    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

② GreetingController.java

 

package hello;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
    @RequestMapping(value="/greeting2")
    public String Greeting2(@RequestParam(value="name",defaultValue="meiyou") String name){
        return name;
    }
    @RequestMapping("/greeting3")
    public List<Greeting> greeting3(@RequestParam(value="name", defaultValue="World") String name) {
        List<Greeting> list=new ArrayList<Greeting>();
        list.add(new Greeting(counter.incrementAndGet(),
                String.format(template, name)));
        list.add(new Greeting(counter.incrementAndGet(),
                String.format(template, name)));
        return list;
    }
}

③ 启动服务  Application.java

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

官网的demo至此为止,可以发现这个demo并不需要配置web.xml或者spring dispatherServlet的xml文件,也需要依赖web容器就可以运行。 看起来这更像是一个普通的Java应用程序。

启动服务&访问

① 因为在pom中配置了插件

 <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

所以我们可以直接 runAs——maven build,target输入 spring-boot:run  来启动服务

② 通过maven package打包项目,生成jar包,然后在target目录下  java -jar  jar包名称,即可启动项目

但是

原搬原官网的demo,启动的时候会报错,顺着报错信息找下去,发现

spring-boot-autoconfigure-1.2.5.RELEASE.jar包下

org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties 类中

有这么一段代码

public static final String DEFAULT_PREFIX = "classpath:/templates/";

public static final String DEFAULT_SUFFIX = ".html";

看样子需要一个templates的目录,于是在resources目录下新建一个templates目录,再次启动成功。

在浏览器中访问:

http://localhost:8080/greeting

{"id":2,"content":"Hello, World!"}

http://localhost:8080/greeting2 meiyou

http://localhost:8080/greeting3 [{"id":3,"content":"Hello, World!"},{"id":4,"content":"Hello, World!"}]

其他

注意到demo的控制器中使用了一个注解 @RestController ,这个在spring3.x里边是没有的。

/*
 * Copyright 2002-2014 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.stereotype.Controller;

/**
 * A convenience annotation that is itself annotated with {@link Controller @Controller}
 * and {@link ResponseBody @ResponseBody}.
 * <p>
 * Types that carry this annotation are treated as controllers where
 * {@link RequestMapping @RequestMapping} methods assume
 * {@link ResponseBody @ResponseBody} semantics by default.
 *
 * @author Rossen Stoyanchev
 * @author Sam Brannen
 * @since 4.0
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {

    /**
     * The value may indicate a suggestion for a logical component name,
     * to be turned into a Spring bean in case of an autodetected component.
     * @return the suggested component name, if any
     * @since 4.0.1
     */
    String value() default "";

}

可以看到该注解是一个类注解,其功能相当于同时应用了  @Controller 和 @ResponseBody

http://www.cnblogs.com/tzyy/p/4837701.html

时间: 2024-11-02 20:38:17

5分钟用Spring4 搭建一个REST WebService(转)的相关文章

3分钟用Docker搭建一个Minecraft服务器_docker

1 写在前面的话 作为一名资深游戏玩家,初次接触Minecraft(我的世界)时我是拒绝的,但玩了一段时间之后便欲罢不能.Minecraft(以下简称MC)作为一款沙盒类游戏,具有极高的自由度,想玩什么完全取决于你.你可以进行传统的荒野求生,打怪升级,可以建造各种风格的建筑,可以成为红石达人,实现各种自动化等等.这是一款最典型的"别人的游戏",有大神在游戏里造了一个32位的计算机你能信?别人的世界,哦不,是我的世界就先介绍到这里. 言归正传,前段时间用网易蜂巢的容器搭了一个Minecr

美橙互联教你5分钟快速搭建一个微餐饮网站

伴随着移动互联网的快速发展.智能手机的普及,生活中诞生了一类新的族群:低头族.数据显示,3721.html">2014年上半年,我国网民每周人均手机上网时长约12小时,八成手机网民每天至少使用手机上网1次,近六成手机网民每天使用手机上网多次. "低头族"越发壮大,改变的不止是人们的消费习惯,也为移动餐饮行业的营销推广服务等各方面留下诸多空白点.传统餐饮商家只有抓住新的变革机遇,善用互联网思维和工具开启微餐饮,才能突破传统营销与服务,开创经营新模式. 那么,如何搭建一个微

oss php sdk+laravel搭建一个简单网站

背景 目前中小型网站最流行的还是采用php搭建自己的web服务器,一个web服务器都会做动静资源分离,静态资源流量小的话,静态文件可以统一放单独目录用域名独立访问,流量稍大的时候,可以直接托管到阿里云OSS上,需要静态资源时从oss拉取,对请求延时苛刻的还可以用CDN做缓存和加速. 目的 介绍如何如何在30分钟内搭建一个简单的web服务器,采用nignx+php-fpm+laravel+oss-php-sdk 框架 ,静态资源托管到阿里云oss上.实现通过浏览器展示一张图片. 简单的服务器框图

基于Nginx搭建一个安全的、快速的微服务架构

本文讲的是基于Nginx搭建一个安全的.快速的微服务架构[编者的话]本文改编自Chris Stetson发表在nginx.conf 2016上的一个有关如今的微服务以及如何使用Nginx构建一个快速的.安全的网络系统的演讲,大家可以在YourTube上回看此次演讲. 0:00 - 自我介绍 Chris Stetson:Hi,我的名字是Chris Stetson,我在Nginx带领专业服务部门,同时也领导微服务实践. 今天我们要谈论微服务以及如何使用Nginx构建一个快速的.安全的网络系统.在我们

《D3.js数据可视化实战手册》—— 1.2 搭建一个简易的D3开发环境

1.2 搭建一个简易的D3开发环境 D3.js数据可视化实战手册 在开始使用D3之前,我们要做的第一件事是搭建一个开发环境.这节里,我们将告诉你如何在几分钟内搭建一个简单的D3开发环境. 1.2.1 准备阶段 在我们开始前,请确保你已经安装好一个文本编辑器. 1.2.2 搭建环境 我们先要下载D3.js. 1.我们可以在http://d3js.org/下载最新版本的D3.js,也可以在https://github. com/mbostock/d3/tags下载之前的版本.另外,如果你对开发中的最

如何自行搭建一个威胁感知大脑 SIEM?| 硬创公开课

       近年来态势感知.威胁情报等等新词不断出现,其实万变不离其宗,它们都是利用已知的数据来判断风险,甚至预知未发生的威胁.这如同一个老练的探险者孤身穿行在原始丛林,他能轻巧自然地避开蛇虫鼠蚁,用脚印来预知猛兽的威胁.这一切都依赖于他那颗善于思考,经验丰富的大脑. 在网络安全的原始森林里,SIEM就扮演这样一个威胁感知大脑的角色.如何在合理成本下打造一个最为强大.合适的 SIEM 系统,是许多安全人员头疼的问题.雷锋网有幸邀请到了拥有十年安全产品经验的百度安全专家兜哥,为大家讲解如何使用开

VPS搭建一个类似“曲径”的代理上网功能

问题描述 VPS搭建一个类似"曲径"的代理上网功能 我手头有一台香港VPS 1.在VPS上安装了shadowsocks,可以在PC端使用,且不容易掉线,但是iphone上不能用. 2.在VPS上搭建VPN,手机端可以使用,但是2分钟左右就会掉线,需要关掉再重连VPN才可以. 3.以前在iphone上用过付费的"曲径"服务,觉得很好用. 它的用法是在iphone中填一个http代理网址即可. 请教的问题: 怎么在我自己的VPS上搭建一个可以给iphone提供代理上网功

Flask入门教程实例:搭建一个静态博客_python

现在流行的静态博客/网站生成工具有很多,比如 Jekyll, Pelican, Middleman, Hyde 等等,StaticGen 列出了目前最流行的一些静态网站生成工具. 我们的内部工具由 Python/Flask/MongoDB 搭建,现在需要加上文档功能,写作格式是 Markdown,不想把文档放到数据库里,也不想再弄一套静态博客工具来管理文档,于是找到了 Flask-FlatPages 这个好用的 Flask 模块.熟悉 Flask 的同学花几分钟的时间就可以用搭建一个简单博客,加

如何在阿里云从零搭建一个防入侵体系

在阿里云从零搭建一个防入侵体系 安全已经成为云计算技术体系中重要组成部分,如果上云后不考虑安全防护措施被入侵的可能性几乎是100%.阿里云提倡安全责任共担模型,阿里云负责云平台基础安全防护,用户负责虚拟化层以上的组件安全.本课程就是教会大家如何利用阿里云提供的各种安全产品在虚拟化层之上搭建一套基础的防入侵体系,包括网络安全.主机安全.应用安全和安全监控四个基础安全产品. 准备工作 安全组 安全组:安全组是阿里云提供的分布式虚拟化防火墙,具备状态检测包过滤功能.安全组是一个逻辑上的分组,这个分组是