SpringBoot数据请求和响应

二、SpringBoot请求     

使用工具Postman:网页测试与发送网页请求的接口测试工具

2.1、接受简单参数

1)原始结构接受参数

原始的web程序中,获取请求参数,需要通过HttpServelRequest对象获取,使用内部的getParameter方法获取具体参数

import jakarta.servlet.http.HttpServletRequest;
    /**
     * 使用原始方法接受请求的参数
     * @return 结果
     */
    @RequestMapping("/simpleParm")
    public String simpleParm(HttpServletRequest request){
        // 获取请求参数---获取到的都是字符串参数
        String name = request.getParameter("name");
        String agestr = request.getParameter("age");
        // 原始的方法需要直接转换类型
        int age = Integer.parseInt(agestr);
        System.out.println("参数为:" + name + ":" + age);
        return "ok";
    }

2)使用springboot接受参数

  • 接受简单参数:请求参数名与形参变量名相同,定义形参就可以接受参数,会进行自动类型转换 ---注意:如果参数名和形参名不一致,接受的数据值为null

    /**
     * springboot方法接受参数
     * @return 结果
     */
    @RequestMapping("/simpleParm_spring")
    public String simpleParm_spring(String name,Integer age){
        System.out.println("接受的参数为:"+ name + "," + age);
        return "ok";
    }
  • 接受简单参数,请求参数名与形参变量名不匹配,可以使用@RequestParam(value = "name")完成映射--注意:使用映射的参数必须传递,不传递就回报错,其它参数可以选择,还可以使用@RequestParam(defaultValue = "默认值")设置默认值

    /**
     * 参数名和形参名不一致
     * @param userName 形式参数名 ,参数名为name
     * @param userAge 形式参数名 ,参数名为userAge
     * @return 结果
     */
    @RequestMapping("/simpleParm_no")
    public String simpleParm_no(@RequestParam(value = "name") String userName,Integer userAge){
        System.out.println("接受的参数为:"+ userName + "," + userAge);
        return "ok";
    }

2.2、接受实体参数

  • 简单实体参数:请求参数名和形参对象属性名相同,定义类接受即可

 /**
     * 接收简单实体参数
     * @param user 实体类内部的属性和请求参数名一致
     * @return 结果
     */
    @RequestMapping("/simplePojo")
    public String simplePoj0(User user){
        System.out.println(user);
        return "ok";
    }
  • 复杂实体参数:请求参数名和形参对象属性名相同,定义类和类的嵌套接收即可

 /**
     * 复杂实体参数
     * @param user 类内部嵌套类Address类接受复杂实体参数
     * @return 结果
     */
    @RequestMapping("/simplePojo_all")
    public String simplePojo_all(User user){
        System.out.println(user);
        return "ok";
    }

2.3、数组集合参数

  • 数组参数:请求参数名和形参数组名相同且请求参数为多个,定义数组类型参数就可以接受

/*
     * @param happy 数组参数接受多个值
     * @return
     */
    @RequestMapping("/simpleArray")
    public String simpleArray(String[] happy){
        System.out.println(Arrays.toString(happy));
        return "ok";
    }
  • 集合参数:请求参数名和形参集合名相同且请求参数为多个,使用@RequestParam绑定参数关系

    /**
     * @param listParm 使用集合参数接收多个值
     * @return 结果
     */
    @RequestMapping("/simpleList")
    public String simpleList(@RequestParam List listParm){
        System.out.println(listParm);
        return "ok";
    }

2.4、日期参数

日期参数:使用@DataTimeFormat注解完成日期参数格式转换

 /**
     * 使用@DateTimeFormat注解完成日期时间参数传递
     * @param updateTime 接收时间参数
     * @return 结果
     */
    @RequestMapping("/simpleDataTime")
    public String simpleDateTime(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println("参数时间:" + updateTime);
        return "0k";
    }

2.5、json类型参数

json参数:定义类接收 ,json数据键名与形参对象的属性名相同,使用@RequestBody标识

    /**
     * 使用实体类接受json数据
     * @param user 使用@RequestBody标识这个类接受json数据
     * @return 结果
     */
    @RequestMapping("/simpleJsonData")
    public String simpleJsonData(@RequestBody User user){
        System.out.println(user);
        return "ok";
    }

2.6、路径参数

路径参数:通过请求URL直接传递参数,使用{...}来标识该路径参数,使用@PathVariable获取路径参数

/**
     * 定义方法接受路径参数,可以接受多个值,之间使用/
     * @param id 使用@PathVariable标识这是一个路径参数
     * @param name 使用@PathVariable标识这是一个路径参数
     * @return 结果
     */
    @RequestMapping("/path/{id}/{name}")
    public String pathParm(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id + " , " + name);
        return "ok";
    }

三、springBoot响应

3.1、响应数据

要响应数据的方法或类使用@RequestBody标识,直接将方法的返回值作为响应数据返回,但是@RestController = @Controller + @RequestBody,所以使用@RestController标识的类中的所有方法都会将返回值最为响应分数据返回,返回的是实体类或者集合,返回时都会转为json格式响应

import com.example.demo.pojo.Address;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
import java.util.ArrayList;
import java.util.List;
​
/**
 * 创建响应类
 */
@RestController
public class ResponseController {
​
    /**
     * @return 返回字符串的响应方法
     */
    @RequestMapping("/responseString")
    public String responseString(){
        System.out.println("返回字符串");
        return "hello";
    }
​
    /**
     * @return 返回类对象的响应方法
     */
    @RequestMapping("/responseAddress")
    public Address responseAddress(){
        System.out.println("返回类对象");
        Address address = new Address();
        address.setProvince("宁夏");
        address.setCity("银川");
        return address;
    }
​
    /**
     * @return 返回集合的响应方法
     */
    @RequestMapping("/responseList")
    public List
responseList(){        System.out.println("返回集合"); ​        List
addr = new ArrayList<>();        Address address1 = new Address();        address1.setProvince("宁夏");        address1.setCity("银川"); ​        Address address2 = new Address();        address2.setProvince("西安");        address2.setCity("海源"); ​        addr.add(address1);        addr.add(address2);        return  addr;   } }

3.2、统一响应数据

创建一个响应结果类,统一返回的响应结果

/**
 * 创建统一的响应结果类---省略了get和set以及tostring方法
 */
public class Result {
    // 统一响应码 1标识成功,0标识失败
    private Integer code;
    // 提示信息
    private String msg;
    // 返回数据
    private Object data;
}

为方便使用返回结果的类,内部提供静态的方法,返回结果类的对象

 // 定义成功的对象---传递返回的值
    public static Result success(Object data){
        return new Result(1,"成功",data);
    }
    
    // 定义成功的对象,响应结果不返回值---不返回值
    public static Result success(){
        return new Result(1,"成功",null);
    }
    
    // 定义失败的对象,不返回值,返回错误提示
    public static Result error(String err){
        return new Result(0,err,null);
    }

将响应的数据的返回值改为Result对象返回

 /**
     * @return 返回字符串的响应方法
     */
    @RequestMapping("/responseString")
    public Result responseString(){
        System.out.println("返回字符串");
        return Result.success("hello");
    }
​
​
    /**
     * @return 返回类对象的响应方法
     */
    @RequestMapping("/responseAddress")
    public Result responseAddress(){
        System.out.println("返回类对象");
        Address address = new Address();
        address.setProvince("银川");
        address.setCity("中卫");
        return Result.success(address);
    }
​
    /**
     * @return 返回集合的响应方法
     */
    @RequestMapping("/responseList")
    public Result responseList(){
        System.out.println("返回集合");
​
        List
addr = new ArrayList<>();        Address address1 = new Address();        address1.setProvince("银川");        address1.setCity("中卫"); ​        Address address2 = new Address();        address2.setProvince("西安");        address2.setCity("海源"); ​        addr.add(address1);        addr.add(address2);        return  Result.error("提示错误的信息");   }

你可能感兴趣的:(spring,boot,后端,java)