Demo project for Spring Boot 【1】spring-boot-starter【2】spring-boot-starter-web

这个控制器简洁明了,但是在引擎盖下面有很多事情要做。我们一步一步地把它分解。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

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

}

package com.example.demo;

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

@GetMapping注释确保对/greeting的HTTP GET请求映射到greeting()方法。

package com.example.demo;

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

其他HTTP动词也有相应的注释(例如@PostMapping for POST)。还有一个@RequestMapping注释,它们都是从中派生的,可以作为同义词(例如@RequestMapping(method=GET))。

@RequestParam将查询字符串参数name的值绑定到greeting()方法的name参数中。如果请求中没有name参数,则使用World的defaultValue。

<?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.2.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</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</artifactId>
		</dependency>
        <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>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

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

</project>

此应用程序使用Jackson JSON库自动将Greeting类型的实例封送到JSON中。默认情况下,网络启动程序会包含Jackson。
此应用程序使用Jackson JSON库自动将Greeting类型的实例封送到JSON中。默认情况下,网络启动程序会包含Jackson。

在Spring构建RESTful web服务的方法中,HTTP请求由控制器处理。这些组件由@RestController注释标识,下面列表中的GreetingController(来自src/main/java/com/example/restservice/GreetingController.java)通过返回greeting类的新实例来处理GET请求/greeting
在Spring构建RESTful web服务的方法中,HTTP请求由控制器处理。这些组件由@RestController注释标识,下面列表中的GreetingController(来自src/main/java/com/example/restservice/GreetingController.java)通过返回greeting类的新实例来处理GET请求/greetingrun:
run
run:
run
方法体的实现基于计数器中的下一个值创建并返回一个具有id和content属性的新问候对象,并使用问候模板格式化给定的名称。

传统MVC控制器和前面所示的RESTful web服务控制器之间的一个关键区别是HTTP响应体的创建方式。这个RESTful web服务控制器填充并返回一个greeting对象,而不是依赖于视图技术来执行将问候语数据呈现到HTML的服务器端。对象数据将作为JSON直接写入HTTP响应。

这段代码使用Spring@RestController注释,它将类标记为一个控制器,其中每个方法返回一个域对象而不是一个视图。它是同时包含@Controller和@ResponseBody的简写。

Greeting对象必须转换为JSON。由于Spring对HTTP消息转换器的支持,您不需要手动执行此转换。因为Jackson 2位于类路径上,所以Spring的MappingJackson2HttpMessageConverter会自动选择将Greeting实例转换为JSON。

@springbootsapplication是一个方便的注释,它添加了以下所有内容:

@配置:将类标记为应用程序上下文的bean定义源。

扫描二维码关注公众号,回复: 10579963 查看本文章

@EnableAutoConfiguration:告诉Spring Boot根据类路径设置、其他bean和各种属性设置开始添加bean。例如,如果spring webmvc位于类路径上,则此注释将应用程序标记为web应用程序并激活关键行为,例如设置DispatcherServlet。

@ComponentScan:告诉Spring在com/example包中查找其他组件、配置和服务,让它找到控制器。

main()方法使用SpringBoot的Spring application.run()方法来启动应用程序。你注意到没有一行XML吗?也没有web.xml文件。这个web应用程序是100%纯Java的,您不必配置任何管道或基础设施。

发布了13 篇原创文章 · 获赞 160 · 访问量 8549

猜你喜欢

转载自blog.csdn.net/blog_programb/article/details/105333580