SpringBoot教程(一)构建restful web服务

一、本地环境

  • 操作系统:Mac OS X 10.13.2
  • 编辑器:IntelliJ IDEA 2017
  • JDK版本:jdk 1.8
  • Maven版本:apache-maven-3.5.0
  • SpringBoot版本:SpringBoot 2.0

二、构建工程(用的是gif动图,网速差的可能加载比较慢)

三、pom依赖文件

<?xml version="1.0" encoding="UTF-8"?>
<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.lonelycountry</groupId>
	<artifactId>springboot_01_restful_web_service</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springboot_01_restful_web_service</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!-- web相关开发类 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- 热部署 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>

		<!-- lombok工具类 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

		<!-- 测试类 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

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

复制代码

特殊说明:
lombok是个注解增强类,在pojo类中使用lombok注解可以减少编写set/get/constructor方法,一个注解搞定,具体可以查看lombok文档。如果需要使用这个类库,需要安装相关编辑器的插件。

四、相关代码

1、结构

2、代码

Application层

package com.lonelycountry;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class Springboot01RestfulWebServiceApplication {

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

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}
复制代码

解读:
main方法是用来启动SpringBoot自带的tomcat容器,restTemplate方法是把RestTemplate注册到bean中。

Vo层

package com.lonelycountry.vo;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @author YeFan
 * 2018/4/2.
 */
@Data
@AllArgsConstructor
public class GreetingVo {
    private Long id;
    private String name;
}

复制代码
package com.lonelycountry.vo;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

/**
 * @author YeFan
 * 2018/4/2.
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class Quote {
    private String type;
    private Value value;
}

复制代码
package com.lonelycountry.vo;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

/**
 * @author YeFan
 * 2018/4/2.
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class Value {
    private Long id;
    private String quote;
}

复制代码

说明:
@Data注解是为类中的成员变量自动生成get/set方法,@AllArgsConstructor注解是为类提供全部成员变量的构造方法。

Controller层

package com.lonelycountry.controller;

import com.lonelycountry.vo.GreetingVo;
import com.lonelycountry.vo.Quote;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

import java.util.concurrent.atomic.AtomicLong;

import static org.springframework.web.bind.annotation.RequestMethod.GET;

/**
 * @author YeFan
 * 2018/4/2.
 */
@RestController
@RequestMapping(value = "/api")
public class GreetingController {
    private static final String TEMPLATE = "hello,%s!";
    private final AtomicLong counter = new AtomicLong();
    private final RestTemplate restTemplate;

    @Autowired
    public GreetingController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @RequestMapping(value = "/greeting", method = GET)
    public GreetingVo greeting(@RequestParam(value = "name", defaultValue = "world") String name) {
        return new GreetingVo(counter.incrementAndGet(), String.format(TEMPLATE, name));
    }

    @RequestMapping(value = "/greeting2/{name}", method = GET)
    public GreetingVo greeting2(@PathVariable(value = "name") String name) {
        return new GreetingVo(counter.incrementAndGet(), String.format(TEMPLATE, name));
    }

    @RequestMapping(value = "/client", method = GET)
    public Quote client() {
        RestTemplate restTemplate2 = new RestTemplate();
        return restTemplate2.getForObject("http://gturnquist-quoters.cfapps.io/api/random", Quote.class);
    }

    @RequestMapping(value = "/client2", method = GET)
    public Quote client2() {
        return restTemplate.getForObject("http://gturnquist-quoters.cfapps.io/api/random", Quote.class);
    }

}
复制代码

说明:
@RequestMapping(value = "/client2")注解用来标注类路径或者方法,增加method属性可以告诉以什么方式处理请求,如果不写会默认使用get/post方式进行解析(具体使用哪种会根据前端的请求方式进行自动选择)。
在类上使用注解@RestController或者在方法上使用注解@ResponseBody会告诉方法要返回的不是一个view而是jsonSpring会使用jackson工具类进行自动解析转换,无须自己转换。


解读:
程序中提供了两种restful服务器端代码以及两种restful客户端代码。如果你有的方法要返回视图的话,可以在类上使用@Controller注解,然后在需要返回json的方法上单独加@ResponseBody注解
restful服务器端:
1、方法greeting()对应的是/api/greeting?name=xxx格式,通过@RequestParam(value = "name", defaultValue = "world")注解进行获取url中带的参数,其中value的值是参数的名字,defaultValue代表默认值,可以不写。
2、方法greeting2()对应的是/api/greeting/name格式,通过@PathVariable(value = "name")注解进行获取url中带的参数,其中value的值是参数的名字。
restful客户端:
1、方法client()使用new一个RestTemplate对象,把对应的rest地址以及想转成的类类型传入,进行转换。
2、方法client2()使用成员变量restTemplate进行操作1中的步骤,想使用这个方法需要在Springboot01RestfulWebServiceApplication类(启动类)中进行注册bean,然后在变量上面或者带该参数的构造方法上面使用@Autowired进行匹配(官方建议在构造方法中进行注册,这样的Controller更加的安全)。

五、测试

测试使用IntelliJ IDEA自带的rest服务测试进行测试。

1、greeting()方法

2、greeting2()方法

3、client()方法

4、client2()方法

六、代码地址及参考文档

源代码
Spring-Building a RESTful Web Service
Spring-Consuming a RESTful Web Service

七、说明

本文为原创,转载请注明原处。

课程简介这是一门使用Java语言,SpringBoot框架,从0开发一个RESTful API应用,接近企业级的项目(我的云音乐),课程包含了基础内容,高级内容,项目封装,项目重构等知识,99%代码为手写;因为这是项目课程;所以不会深入到源码讲解某个知识点,以及原理,但会粗略的讲解下基础原理;主要是讲解如何使用系统功能,流行的第三方框架,第三方服务,完成接近企业级项目,目的是让大家,学到真正的企业级项目开发技术。适用人群刚刚毕业的学生想提高职场竞争力想学从零开发SpringBoot项目想提升SpringBoot项目开发技术想学习SpringBoot项目架构技术想学习企业级项目开发技术就是想学习SpringBoot开发能学到什么从0开发一个类似企业级项目学会能做出市面上90%通用API快速增加1到2年实际开发经验刚毕业学完后能找到满意的工作已经工作学完后最高涨薪30%课程信息全课程目前是82章,155小时,每节视频都经过精心剪辑。在线学习分辨率最高1080P课程知识点1~11章:学习方法,项目架构,编码规范,Postman使用方法,Git和Github版本控制12~16章:搭建开发环境,快速入门SpringBoot框架17~20章:快速入门MySQL数据库21~30章:MyBatis,登录注册,找回密码,发送短信,发送邮件,企业级接口配置31~41章:实现歌单,歌单标签,音乐,列表分页,视频,评论,好友功能42~48章:阿里云OSS,话题,MyBatis-plus,应用监控49~53章:Redis使用,集成Redis,SpringCache,HTTP缓存54~58章:Elasticsearch使用,集成Elasticsearch,使用ES搜索59~61章:商城,集成支付宝SDK,支付宝支付62~64章:常用哈希和加密算法,接口加密和签名65~67章:实时挤掉用户,企业级项目测试环境,企业级接口文档68~69章:SpringBoot全站HTTPS,自签证书,申请免费证书70~73章:云MySQL数据库,云Redis数据库使用,轻量级应用部署环境,域名解析74~80章:Docker使用,生产级Kubernetes集群,域名解析,集群全站HTTPS81~82章:增强和重构项目,课程总结,后续学习计划
课程的实战源码是我在 GitHub 上开源项目 spring-boot-projects 中的其中一个项目代码,目前已有 2300 多个 star,项目截图如下: 由于项目比较受大家欢迎,因此心中就出现了将它做成教学视频的想法,也就是你现在了解的这个课程《SpringBoot入门及前后端分离项目开发》,本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发。Spring Boot 介绍、前后端分离、API 规范等内容旨在让读者更加熟悉 SpringBoot 及企业开发中需要注意的事项并具有使用 SpringBoot 技术进行基本功能开发的能力;这最后的项目实战为课程的主要部分,我会带着大家实际的开发一个前后端分离的 Spring Boot 实践项目,让大家实际操作并从无到有开发一个线上项目,并学习到一定的开发经验以及其中的开发技巧,旨在让读者具有将 Spring Boot 真正应用于项目开发的能力; 以下为实践项目的页面和功能展示,分别为:登录页面 列表页面(分页功能) 图片上传功能 富文本编辑器整合使用 实践项目的主要功能和页面就是这些,通过项目展示大家也能够感受到,在实际应用开发中的高频次功能都已经实现,稍加修改就可以运用到企业开发中,整个项目的开发模式为前后端分离的模式,即 Spring Boot 提供后端接口,前端页面通过 Ajax 异步调用接口的方式与后端服务器进行交互并将数据填充至页面中,这也是目前企业开发中比较重用的开发模式,希望大家能够了解并且能够实际的上手开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值