万金流
初次使用博客园,目前感觉还不错。 不知不觉用了4年零4个月了,越来越喜欢博客园。

思路:以官网教程为主线,使用官网的在线工具,完成任务。

效果:运行一个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));
    }

(完)

posted on 2023-09-15 12:37  万金流  阅读(512)  评论(0编辑  收藏  举报