spring构建一个 RESTful Web Service

1.简介

RESTful(Representational state transfer))简化了 web service 的设计,它不再需要 wsdl ,也不再需要 soap 协议,而是通过最简单的 http 协议传输数据 ( 包括 xml 或 json) 。既简化了设计,也减少了网络传输量(因为只传输代表数据的 xml 或 json ,没有额外的 xml 包装),是一种接口规范。

2.如何构建

要求:建立一个接受HTTP GET请求的服务。
请求:http://localhost:8080/greeting
响应:{“id”:1,“content”:“Hello, World!”}

1.1 使用spring Initialize开始构建

使用Maven,参照Spring Initializr生成具有所需依赖项的新项目(Spring Web)。
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>rest-service</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>rest-service</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<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>
	</dependencies>

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

</project>

1.2 自己定制构建

参考: https://start.spring.io/.
增加需要的依赖,然后点击下方的生成即可得到一个自定义的项目。
在这里插入图片描述

1.3 使用idea 构建该项目

本文使用的是社区版idea,因此使用maven构建该项目,然后导入刚刚生成的pom文件,覆盖原有的pom文件,然后点击刷新导入依赖文件。如下:
在这里插入图片描述

1.4 创建相应的bean和controller

1.创建bean类
POJO(plain old java object)。感觉和javaBean差不多。

package com.example.restservice;

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;
    }
}

2.创建controller
controller类负责处理客户端的请求

package com.example.restservice;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.GetMapping;
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();

	@GetMapping("/greeting")
	public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
		return new Greeting(counter.incrementAndGet(), String.format(template, name));
	}
}

其中 @GetMapping("/greeting") 这个注解可以使得前端请求的http get请求 映射到该方法(greeting)上;
@RequestParam 这个注解将查询字符串参数的值绑定到方法的参数中,即name上,请求中不存在该参数就设置word为默认值;
注意点:@Controller,@RestController注解的不同,该注解将类标记为控制器,其中,@RestController每个方法均返回域对象而不是视图。 这是同时包含@Controller和@ResponseBody的简写。

为了使得Greeting返回的对象是json,所以必须进行转换,但是spring的http提供的这种转换(MappingJackson2HttpMessageConverter会自动的去转换返回的对象 )。

@SpringBootApplication 是Sprnig Boot项目的核心注解,目的是开启自动配置

注解含义
@Configuration@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的,作用为:配置spring容器(应用上下文)
@EnableAutoConfiguration借助@Import的支持,收集和注册特定场景相关的bean定义。将所有符合自动配置条件的bean定义加载到IoC容器
@ComponentScan自动扫描并加载符合条件的组件,(Configuration,Component,Service)我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描

3.创建 Application

package com.example.restservice;

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

}

运行 Application类。然后分别访问http://127.0.0.1:8080/greeting;http://localhost:8080/greeting?name=User

在这里插入图片描述

在这里插入图片描述
链接: https://spring.io/guides/gs/rest-service/#scratch.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值