SpringBoot官网例子(1)——Building a RESTful Web Service(建立RESTful的Web服务)

近期打算把SpringBoot重学一下,就先从官网看起吧,打算把官网的例子一个一个搬过来,对,就是个搬运工。官网的例子在这里https://spring.io/guides ,争取每天至少搬运一个吧,搬运的代码放到这里https://github.co/github20131983/springboot

1、准备工作

原文:https://spring.io/guides/gs/rest-service/

  • >=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容器,开启自动配置以及扫描路径下的组件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值