万金流
以码会友。 吾Q:578751655。 水平有限,轻喷,谢!

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

效果:运行一个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请求,java会尝试将传递过来的json字符串跟参数类型匹配、赋值。

下例中,返回内容也会转换为Json字符串:

控制器:

@RestController 
public class TestController {
    @PostMapping ("/postit")
    public Student t1(@RequestBody Student s)
    {
        s.nl*=2;
        return  s;
    }
}

  配合实体类(getter/setter访问器一定要有):

public class Student {
    String xm;
    int nl;
    public String getXm() {
        return xm;
    }
    public int getNl() {
        return nl;
    }
    public void setXm(String xm) {
        this.xm = xm;
    }
    public void setNl(int nl) {
        this.nl = nl;
    }
}

  CMD下,crul验证:

curl -X POST -H "Content-Type: application/json" -d "{\"xm\":\"ZS\",\"nl\":20}" http://localhost:8080/postit

  结果:

{"nl":40,"xm":"ZS"}

  

(完)

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