目录

一、背景

二、配置端口和路径

三、实现接口请求

3.1 整个类的注解

3.2 设置请求必传参数&参数的默认值

四、restful风格接口 注解

五、接口的传参与返回值为json格式

5.1 url传参为对象,直接传类的属性值,key =value 格式

5.2 url传参为json

5.3 设置请求方式get/post

5.4 返回值为一个对象

六、封装接口返回值


一、背景

常见的接口,如get请求,参数直接在url里传输:

http://127.0.0.1:8080/boot/show?age=18&name=zhangsan

像post请求,传参与返回值都是json格式的数据。那这个spring boot是如何实现的呢?

spring boot开发接口 spring boot 接口_json格式

 

二、配置端口和路径

在resource文件夹中,application.yml 配置项目的端口号和路由。

application.yml

server:
  port: 8080
  servlet:
    context-path: /boot

我们该项目的端口为8080,路径为/boot

整个项目的请求路径就是http://host:8080/boot/xxxxxx

三、实现接口请求

3.1 整个类的注解

创建Controller类。使用注解@RestController

@RestController 作用等于 @Controller + @ResponseBody

当我们整个类不使用@RestController时,需要使用@Controller 与 @ResponseBody这两个注解。

@ResponseBody注解的作用是将我们的返回值转成json格式。

@RequestMapping("/test")注解,设置我们整个类的路径为/test

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class HiController {

    @RequestMapping("/hi")
    public String sayHi(){
        return "hi success";
    }

}

如方法sayHi的请求(public String sayHi()),路径为/hi,整体路径就是

http://host:8080/boot/test/hi

接口返回值为 hi success

3.2 设置请求必传参数&参数的默认值

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class HiController {

    @RequestMapping("/hi")
    public String sayHi(){
        return "hi success";
    }

    @RequestMapping("/hello")
    public String sayHello(@RequestParam(required = true,defaultValue = "张三") String name){
        return "hello"+name;
    }
}

设置hello请求,name参数为必填项目。name不传会直接报错

@RequestParam(required = true)

这里还可以给name参数设置默认值,当name不传时,默认为 张三

@RequestParam(defaultValue = "张三")

具体请求:

http://127.0.0.1:8080/boot/test/hello?name=李四

返回值为 hello李四

传参格式为?后面key=value格式

四、restful风格接口 注解

使用@PathVariable注解

@RequestMapping("/hi5/{sid}")
    public String hi5(@PathVariable("sid") int id){
        String name = null;
        switch (id){
            case 1:
                name="zs";
                break;
            case 2:
                name="lisi";
                break;
            default:
                name="dashu";
                break;
        }
        return "hi,"+name;

    }

    @RequestMapping("/hi6/{id}")
    public String hi6(@PathVariable int id){
        String name = null;
        switch (id){
            case 1:
                name="zs";
                break;
            case 2:
                name="lisi";
                break;
            default:
                name="dashu";
                break;
        }
        return "hi,"+name;

    }

对应的请求

http://127.0.0.1:8080/boot/hi5/1

http://127.0.0.1:8080/boot/hi5/2

注意:

spring boot开发接口 spring boot 接口_spring boot开发接口_02

 这里的名称要保持一致,如果不想保持一致的话,可以使用@PathVariable("sid")  给id 设置一个别名。

spring boot开发接口 spring boot 接口_intellij-idea_03

 这里设置id的别名为sid,保证这两处的名称一致就可以了。

五、接口的传参与返回值为json格式

接口的传参与返回值为json格式,是将一个对象转成了json格式。

传参数与返回值的本质各自是一个对象。

定义一个Student类。

import lombok.Data;

@Data
public class Student {
    private String name;
    private int age;
}

设置一个接口的请求参数为Student类

@RequestMapping("/show")
    public String show(Student student){
        return student.toString();
    }

5.1 url传参为对象,直接传类的属性值,key =value 格式

不传参数,直接请求

http://127.0.0.1:8080/boot/show

spring boot开发接口 spring boot 接口_json格式_04

传参数

http://127.0.0.1:8080/boot/show?age=18&name=zhangsan

 

spring boot开发接口 spring boot 接口_java_05

 我们直接在url的请求里,直接输入了student类的属性值,spring boot 成功识别了 Student这个类。

5.2 url传参为json

上面的Person类,我们要求url传Person类时,要求传参数为Json格式。

使用@RequestBody

@RequestMapping("/show1")
    public String show1(@RequestBody Student student){
        return student.toString();
    }

在postman中,设置传参为json格式

spring boot开发接口 spring boot 接口_spring boot开发接口_06

5.3 设置请求方式get/post

接着第三节Person类讲,我们设置请求的方式。

如设置请求为post请求。method = RequestMethod.POST

@RequestMapping(value = "/show1",method = RequestMethod.POST)
    public String show1(@RequestBody Student student){
        return student.toString();
    }

在postman中,进行post请求 

spring boot开发接口 spring boot 接口_json格式_07

5.4 返回值为一个对象

当接口请求的返回值,为一个对象时。

@RequestMapping(value = "/show2",method = RequestMethod.POST)
    public Student show2(@RequestBody Student student){
        return student;
    }

使用postman进行请求,发现接口返回值也是一个json。

spring boot开发接口 spring boot 接口_spring_08

 这是因为我们整个类的注解

@RestController = @Controller + @ResponseBody

返回值为json,是这个@ResponseBody注解的作用。

当我们整个类不使用@RestController时,需要使用@Controller 与 @ResponseBody这两个注解。

本节源码

package com.example.com_chenshuai.Controller;

import com.example.com_chenshuai.entity.Student;
import org.springframework.web.bind.annotation.*;

@RestController
public class HiController {

    @RequestMapping("/hi")
    public String hi(){
        return "hi";
    }

    @RequestMapping("/hi1")
    public String hi1(@RequestParam(required = true,defaultValue = "张三") String name){
        return "hi"+name;
    }

    @RequestMapping("/hi5/{sid}")
    public String hi5(@PathVariable("sid") int id){
        String name = null;
        switch (id){
            case 1:
                name="zs";
                break;
            case 2:
                name="lisi";
                break;
            default:
                name="dashu";
                break;
        }
        return "hi,"+name;

    }

    @RequestMapping("/hi6/{id}")
    public String hi6(@PathVariable int id){
        String name = null;
        switch (id){
            case 1:
                name="zs";
                break;
            case 2:
                name="lisi";
                break;
            default:
                name="dashu";
                break;
        }
        return "hi,"+name;

    }

    @RequestMapping("/show")
    public String show(Student student){
        return student.toString();
    }

    @RequestMapping(value = "/show1",method = RequestMethod.POST)
    public String show1(@RequestBody Student student){
        return student.toString();
    }

    @RequestMapping(value = "/show2",method = RequestMethod.POST)
    public Student show2(@RequestBody Student student){
        return student;
    }
}

六、封装接口返回值

我们定义ResultMsg类,来封装接口返回值。

ResultMsg类

package com.example.com_chenshuai.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResultMsg<T> {
    public static final String SUCCESS_CODE = "200";
    public static final String SUCCESS_STATUS = "success";

    private String no;
    private String msg;
    private T data;

    public ResultMsg(String no, String msg) {
        this.no = no;
        this.msg = msg;
    }

    public static <T> ResultMsg<T> success(T data){
        return new ResultMsg<>(SUCCESS_CODE,SUCCESS_STATUS,data);
    }
    public static <T> ResultMsg<T> error(String no,String msg){
        return new ResultMsg<>(no,msg);
    }
}

这里使用泛型。

我们定义一个Student类,单纯是为了举例子。

Student类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private String no;
    private String name;
}

Controller请求,及返回值的封装。(StudentController )

package com.example.com_chenshuai.Controller;
import com.example.com_chenshuai.entity.ResultMsg;
import com.example.com_chenshuai.entity.Student;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/student")
@RestController
public class StudentController {

    @RequestMapping(value = "/add",method = RequestMethod.POST)
    public ResultMsg<Student> addStudent(@RequestBody Student student){

        boolean b = true;
        if (b){
            return ResultMsg.success(student);
        } else {
            return ResultMsg.error("100","增加失败");
        }
    }

}

启动项目后,使用postman进行请求

spring boot开发接口 spring boot 接口_spring_09