SpringBoot_01_Building a RESTful Web Service

官方:http://spring.io/guides/gs/rest-service/


POM

 Spring Boot Maven plugin 提供以下功能:

1. 打包jar或者war,或者其他的。

2. 搜寻main入口方法。

3. 提供一个自动匹配springboot版本的依赖解析器,但是我暂时不知道有什么用。

实现的目标

我们创建了一个springboot的web项目,并且引入了依赖。

我们实现一个接受get请求,返回一个json。接受一个带参数的get请求,返回一个json。返回的json大致如下:

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

首先我们手动的创建一个pojo对象类:

package com.springbootexamples.restfulwebservice.hello;

public class Greeting {

    private final long id;

    private final Stringcontent;

    public Greeting(long id, String content) {

        this.id = id;

        this.content = content;

    }

    public long getId() {

        return id;

    }

    public StringgetContent() {

        return content;

    }

}

创建Controller

@RestController注解的类,即可成为一个controller

package com.springbootexamples.restfulwebservice.hello;

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

import org.springframework.web.bind.annotation.RequestParam;

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

import java.util.concurrent.atomic.AtomicLong;

@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));

    }

}

这是一个很简单的controller,在spring引擎下还有很多事,下面我们一步一步分析他。

这个例子并没有展示出get、post、put之间的区别,因为RequestMapping默认会包含所有请求方法映射,可以使用@RequestMapping(method=GET)缩小范围。

如果路由会将请求定位到greeting()方法,@RequestParam注解会查询url请求中的name参数的值。

如果参数name对应的值是缺省的,那么会用默认的World来代替。

这个方法体的实施是创造并且返回一个新的Greeting对象,这个对象包含一个id和一个content,id会在计数器的作用下不断增加,string的format方法会将name参数按照template 的格则整理。

传统的MVCController和Restful的Controller一个明显区别是,传统mvc是将视图渲染为html进行返回,但是restful会将对象转换成json返回。

这一篇的代码,使用Spring4中的新的@RestController注解,这个类作为一个Controller存在,作用是,在每个方法中返回一个domainObject(一个实体类,或者可以理解为其他人经常说的pojo对象),而代替view,他是@Controller 和@ResponseBody组合在一起的缩写。

Greeting对象必须转换为json,由于Spring的HTTp消息转化支持,不需要去自己做json的转换,因为Jackson2在我们的类路径里面,Spring的MappingJackson2HttpMessageConverter会自动的将Greeting转化为json。

让这个应用变成可执行的

即使我们可能将服务器作为传统的war包部署在外部的服务器中,但是下面利用了一个更加简单的方法创建了一个独立的应用程序,我们将所有的东西打包在一个单独的可执行的jar中,通过java的main方法驱动,接着,你可以将Spring支持的TomcatServlet打包到jar作为程序的运行环境,而不是部署到外部的服务器实例。

让我们看下面的main方法:

package com.springbootexamples.restfulwebservice;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class RestfulwebserviceApplication {

    public static void main(String[] args) {

        SpringApplication.run(RestfulwebserviceApplication.class, args);

    }

}

@SpringBootApplication的作用:

@SpringBootApplication这个注解包含了三个注解的作用,分别是:(默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan,下面分别解释:

1. @Configuration:提到@Configuration就要提到他的搭档@Bean。使用这两个注解就可以创建一个简单的spring配置类,可以用来替代相应的xml配置文件。


相当于:


@Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。

2. @EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。

3.@ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。

另外,我们发现整个工程没有web.xml也没有其他的xml。

打包成为可执行jar

如果我们用的maven,./mvnw spring-boot:run命令来运行,./mvnw clean package打包一个jar。

然后使用下面的语句运行jar:

java -jar target/gs-rest-service-0.1.0.jar

当然,我们也可以打war。

让我们来测试一下


无参数


有参数,并且计数器加1


其他

关于【AtomicLong】

参考资料:java多线程--AtomicLong和LongAdder

Java并发编程札记-(三)JUC原子类-06JDK1.8新增:LongAdder、DoubleAdder、LongAccumulator、DoubleAccumulator

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,678评论 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,221评论 1 92
  • 1.1 spring IoC容器和beans的简介 Spring 框架的最核心基础的功能是IoC(控制反转)容器,...
    simoscode阅读 6,685评论 2 22
  • 我们这两男的,都抠,小肚鸡肠,嘴巴讨厌,一副傻样,只希望不要被看到才是,实话,第一眼看过去,傻不拉几的,相处久了得...
    1大太阳阅读 151评论 0 1