近期打算把SpringBoot重学一下,就先从官网看起吧,打算把官网的例子一个一个搬过来,对,就是个搬运工。官网的例子在这里https://spring.io/guides ,争取每天至少搬运一个吧,搬运的代码放到这里https://github.co/github20131983/springboot。
1、准备工作
- >=1.8的JDK
- Eclipse(其它任何合适的IDE)
- Maven3.2(官网也有Gradle的构建)
2、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.springboot</groupId>
<artifactId>springboot-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
<modules>
<module>springboot-RESTfulWebService</module>
</modules>
<repositories>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
</project>
这是本工程的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>
<parent>
<groupId>com.springboot</groupId>
<artifactId>springboot-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springboot-RESTfulWebService</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</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>
</project>
3、工程
工程结构:
代码:
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);
}
}
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;
}
}
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;
import com.springboot.entity.Greeting;
@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));
}
}
4、总结
1、这个项目的功能是输入链接,然后如果带名字的话输出hello,名字,否则的话是hello,world,此外还会输出你是第几个访问的。结果是json字符串的如下:
2、Controller里用到了一个格式化字符串,还有用到了原子操作记录是第几个访问的,这个是为了防止大量用户并发访问时的计数不准确,因为自加或者加一这种操作都不是原子的,有可能被打断导致的计数不准确。
3、里边涉及到四个注解,一一解释一下:
- @RestController:标记一个类为Controller,它是@ResponseBody和@Controller的组合,对于对象转Json的操作,spring已经帮忙做了(Spring用的是Jackson)所以无需手动转了。
- @RequestParam:绑定请求中的值到方法的参数中,可以设置一个默认值。
- @SpringBootApplication:它是@Configuration,@EnableAutoConfiguration与@ComponentScan的组合,其作用分别为配置Spring并启动Spring容器,开启自动配置以及扫描路径下的组件。