构建一个REST风格的Web服务

el/2024/5/23 2:05:21

你需要什么

  • 大约15分钟
  • IntelliJ IDEA或其他编辑器
  • JDK 1.8或更高版本
  • Maven 3.2+

你会建立什么

您将在以下地址构建一个将接受HTTP GET请求的服务:

http://localhost:8080/greeting

会返回一个JSON 格式的数据:

{"id":1,"content":"Hello, World!"}

您可以使用查询字符串中的可选名称参数来自定义问候语:

http://localhost:8080/greeting?name=User

名称参数值覆盖“World”的默认值,并反映在响应中:

{"id":1,"content":"Hello, User!"}

项目步骤

1、添加maven依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

2、新建表现层类

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

3、新建controller

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;@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));}
}
  • @RequestMapping注释可确保对/greeting的HTTP请求映射到greeting()方法。
  • @RequestParam将查询字符串参数名称的值绑定到greeting()方法的name参数中。如果请求中缺少name参数,则使用“World”的defaultValue
  • 此代码使用Spring 4的新的@RestController注释,该注释将类标记为控制器,其中每个方法都返回一个域对象而不是视图(view)。它是@Controller@ResponseBody的缩写。
  • Greeting对象必须转换为JSON。由于Spring的HTTP消息转换器支持,您不需要手动执行此转换。因为Jackson 2在类路径上,自动选择Spring的MappingJackson2HttpMessageConverter将Greeting实例转换为JSON。

上面的例子没有指定GET与PUT,POST等等,因为@RequestMapping默认映射所有的HTTP操作。使用@RequestMapping(method = GET)来缩小这个映射。

4、新建启动方法

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

@SpringBootApplication是一个方便的注释,它包含了以下所有内容:

package org.springframework.boot.autoconfigure;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration    // 就是 @Configuration 应用程序上下文的bean定义的来源
@EnableAutoConfiguration    // based on classpath settings, other beans, and various property settings. 依据类路径设置、其他beans以及各种属性配置文件来配置bean
@ComponentScan(             //告诉Spring在当前类所在包中查找其他组件,配置和服务,以及找到控制器excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {@AliasFor(annotation = EnableAutoConfiguration.class,attribute = "exclude")Class<?>[] exclude() default {};@AliasFor(annotation = EnableAutoConfiguration.class,attribute = "excludeName")String[] excludeName() default {};@AliasFor(annotation = ComponentScan.class,attribute = "basePackages")String[] scanBasePackages() default {};@AliasFor(annotation = ComponentScan.class,attribute = "basePackageClasses")Class<?>[] scanBasePackageClasses() default {};
}

除此之外,通常你会为Spring MVC应用程序添加@EnableWebMvc,但Spring Boot会在类路径中看到spring-webmvc时自动添加它。

测试

ok ,到这就完了,接下来可以启动项目运行 main() 方法,然后按照文首自行测试一把。

原文地址 https://spring.io/guides/gs/rest-service/#initial


http://www.ngui.cc/el/4466039.html

相关文章

调度任务Scheduling Tasks

你需要什么 大约15分钟IntelliJ IDEA或其他编辑器JDK 1.8或更高版本Maven 3.2 你会建立什么 您将构建一个应用程序&#xff0c;该应用程序使用Spring的 Scheduled 注解&#xff0c;每5秒打印一次当前时间。 构建步骤 1、添加maven依赖 <dependency><groupId>…

消费RESTful Web服务

你需要什么 大约15分钟IntelliJ IDEA或其他编辑器JDK 1.8或更高版本Maven 3.2 你会建立什么 您将构建一个使用Spring RestTemplate的应用程序来获取 http://gturnquist-quoters.cfapps.io/api/random 中的随机Spring Boot数据。 构建步骤 1、添加maven依赖&#xff1a; &l…

上传文件Uploading Files

你需要什么 大约15分钟IntelliJ IDEA或其他编辑器JDK 1.8或更高版本Maven 3.2 你会建立什么 您将创建一个接受文件上传的Spring Boot Web应用程序。您还将构建一个简单的HTML界面来上传测试文件。 构建步骤 1、添加maven依赖。 <dependency><groupId>org.spri…

Redis安装和常见问题解决

安装 redis 安装指令&#xff1a; yum install epel-release --下载fedora的epel仓库 yum install redis -- 安装redis数据库开启和关闭服务 redis 其他常用指令&#xff1a; redis-server /etc/redis.conf --开启redis服务 redis-cli -- 进入redis服…

使用Redis进行消息传递

你需要什么 大约 15 15 分钟IntelliJ IDEA或其他编辑器JDK 1.8或更高版本Maven 3.2Redis server 你会建立什么 您将构建一个使用StringRedisTemplate发布字符串消息的应用程序&#xff0c;并使用MessageListenerAdapter为其提供POJO订阅。 使用Spring Data Redis作为发布消…

thymeleaf 怎么降低对html的解析标准

正常情况下&#xff0c;如果不做任何配置的话&#xff0c;thymeleaf会以严格的html标准来要求html文件的标签以及js代码遵守规范。但是我们知道html代码是一种不是那么严格的语言&#xff0c;导致很多码农编码时并不是那么严格按照规范&#xff0c;比如<meta>、<link&…

利用 redis 实现延迟消息队列

有一些应用场景&#xff0c;比如下完订单后&#xff0c;20分钟没有付款&#xff0c;可以取消订单。这里会用到延迟消息队列。由于不想维护各种 MQ&#xff0c;如果你的项目里面用了 redis 的话&#xff0c;可以选择利用 redis 的特性来实现延迟消息队列。 设计原理&#xff1a;…

redis 常用命令行指令汇总

Redis 配置 Redis 配置放在文件名为 redis.conf 的文件中。 1、获取配置信息 语法&#xff1a; CONFIG GET CONFIG_SETTING_NAME 样例&#xff1a; 192.168.56.101:0>CONFIG GET port 1) port 2) 6379 2、 编辑配置 语法&#xff1a; CONFIG SET CONFIG_SETTING_NA…

用RabbitMQ发送消息

你需要什么 大约 15 15 分钟IntelliJ IDEA或其他编辑器JDK 1.8或更高版本Maven 3.2RabbitMQ服务器 你会建立什么 您将构建一个使用Spring AMQP的RabbitTemplate发布消息并使用MessageListenerAdapter在POJO上订阅消息的应用程序。 构建步骤 1、安装 RabbitMQ。 2、添加 …

验证表单输入

你需要什么 大约 15 分钟IntelliJ IDEA或其他编辑器JDK 1.8或更高版本Maven 3.2 你会建立什么 您将构建一个简单的Spring MVC应用程序&#xff0c;它接受用户输入并使用标准验证注解检查输入。您还将看到如何在屏幕上显示错误消息&#xff0c;以便用户可以重新输入有效的输入…