思路:以官网教程为主线,使用官网的在线工具,完成任务。
效果:运行一个webapi,在浏览器里得到形如 {"id":1,"content":"Hello, World!"} 的反馈。如果查询字符串里有name变量,如 http://localhost:8080/greeting?name=User ,则反馈 {"id":1,"content":"Hello, User!"}
官网教程:在这里。
如果你英文还过得去,有钻研精神,建议你跳过横线下面的内容,直接看官网教程。
避坑提醒:1、官网教程忽略了在线工具生成的项目有“demo”这一级,里面提到的新建文件/文件夹位置,都应加上“/demo”。包名称也是。2、运行的时候,使用“mvn”命令即可正常调试。
具体操作如下:
1、在 https://start.spring.io/ 选择基本内容,点击“生成”(GENERATE)按钮,生成并下载项目模板。
需要设置的内容有:项目(project)--maven,java--20(视你机器的具体情况),依赖项(Dependencies)--Spring Web
片刻后,你会得到一个打包好的项目,demo.zip。
2、解压打开下载的项目,在 src\main\java\com\example\demo 添加文件夹”restservice“
添加表达反馈内容格式的记录类型Greeting。操作如下:
在restservice文件夹下新建文件Greeting.java。
package com.example.demo.restservice; public record Greeting(long id, String content) { }
在相同位置,新建控制器”GreetingController“,对应的文件为GreetingController.java
1 package com.example.demo.restservice; 2 3 import java.util.concurrent.atomic.AtomicLong; 4 5 import org.springframework.web.bind.annotation.GetMapping; 6 import org.springframework.web.bind.annotation.RequestParam; 7 import org.springframework.web.bind.annotation.RestController; 8 9 @RestController 10 public class GreetingController { 11 12 private static final String template = "Hello, %s!"; 13 private final AtomicLong counter = new AtomicLong(); 14 15 @GetMapping("/greeting") 16 public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) { 17 return new Greeting(counter.incrementAndGet(), String.format(template, name)); 18 } 19 }
第9行表示这是一个rest风格的控制器类。
第15行表示所有形如”http://localhost:8080/greeting“的请求,都被下面的方法处理。
第16行的参数部分,表示取浏览器送过来的name变量的值,给字符串变量name。默认值是World。
3、编译:控制台运行”mvn compile“。
4、运行:控制台命令”mvn spring-boot:run“。
开发测试,机器上可以没有tomcat,spring框架里带了个容器的。图中红线部分为web端口。
5、打开浏览器,可以测试。
带上name,zs意为张三:
ctrl+c可以停止调试。
说明:
1、和所有语言的webapi相同,java也有默认的跨域禁止策略。要取消,在对应的控制器类或方法前加入“@CrossOrigin”即可。
2、使用另外的注解可以接收post请求:
@PostMapping("/greeting1") public Greeting greeting1(@RequestBody String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); }
(完)