Springboot请求和响应
本文最后更新于150 天前,如有错误请发送邮件到3270403724@qq.com,欢迎大家纠错

请求

测试准备工作

IDEA springboot项目,加入依赖web -> spring web。其他代码:

User类:

public class User {
    private String name;
    private Integer age;
    private Address address;
    //Getter和Setter方法...

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

Address类:

public class Address {
    private String province;
    private String city;

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
    //Getter和Setter方法...
}

测试类:

@RestController
public class RequestController {
      //如下测试代码
}

@RestController 结合了 @Controller 和 @ResponseBody 注解的功能

  • @Controller:被@Controller 标记的类实际上就是个SpringMVC Controller对象,它是一个控制器类,负责处理通过 DispatcherServlet 分发的请求。通常与@RequestMapping(或其派生注解如 @GetMapping@PostMapping 等)联用,当SpringMVC获取到请求时会转发到指定路径的方法进行处理。(作用类似于管家)
  • @ResponseBody@ResponseBody用于将控制器的返回值自动转换为 JSON 或 XML 等格式,并写入 HTTP 响应体中。如果没有@ResponseBody,就需手动创建响应对象,设置响应头,数据转换并写入响应体。

简单参数web程序比较

原始web程序

使用 HttpServletRequest 手动获取参数

    @RequestMapping("/simpleParam")
    public String simpleParam(HttpServletRequest request){
        //获取请求参数
        String name = request.getParameter("name");
        String ageStr = request.getParameter("age");

        int age = Integer.parseInt(ageStr);
        System.out.println(name+ ":" + age);
        return "OK";
    }

这种写法虽然灵活性较高,但过于繁琐。

springboot方式

使用方法参数自动绑定参数,请求参数名与方法参数名设置为相同即可直接接收请求的参数。

    //springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(String name, Integer age){
        System.out.println(name+ ":" + age);
        return "OK";
    }

使用Postman进行测试一下:

控制台输出:

测试成功。

(请求方式随意,@RequestMapping 没有指定允许的 HTTP 方法会匹配 所有类型的 HTTP 方法。这意味着无论客户端使用哪种 HTTP 方法发起请求,只要路径匹配,就会触发相应的方法处理)

@RequestMapping(“/”):@RequestMapping(value = “path”, method = RequestMethod.method)

  • value/path:定义请求的 URL 路径(单参数时可以不写参数名,直接写路径)
  • method:指定允许的 HTTP 方法,如RequestMethod.GET、RequestMethod.POST、RequestMethod.PUT
  • params、headers等其他参数

自定义绑定方式

什么的方法中自动绑定参数,需要请求参数名与方法参数名相同,但如果不同又要绑定,就用如下写法:

    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name = "name", required = false) String username, Integer age){
        System.out.println(username+ ":" + age);
        return "OK";
    }

@RequestParam(name = "name", required = false) 告诉Spring MVC,HTTP请求中应该有一个名为name的参数,并且这个参数的值应该被绑定到方法的username参数上。即使你在方法签名中使用了username作为参数名,@RequestParamname属性仍然指定了请求参数的实际名称。

@RequestParam( )参数介绍:

  • name/value:指定请求参数的名字。
  • defaultValue:参数提供一个默认值。如果请求中没有提供该参数,或者参数值为空字符串(””),则使用默认值。(对下面来说,你可以通过不提供 defaultValue 来隐式地表示参数是必需的)
  • required:参数是否必需,但@RequestParam 本身没有直接的 required 属性,在某些情况下,你可能会看到 required=false 或 required=true 的用法,但这通常是通过 @RequestParam 的一个自定义变体或与其他注解(如 @ApiParam 在 Swagger 中)结合使用来实现的,而不是 @RequestParam 本身的标准属性。

其他参数处理

实体参数

如果参数是个类会怎么样呢?先介绍一下定义:

  • 简单实体对象:结构相对简单、属性较少的实体对象。
  • 复杂实体对象:结构复杂、属性较多且可能包含与其他实体对象之间复杂关系的实体对象。

简单实体参数

    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OK";
    }
简单测试一下,给name和age传递参数,先不给address传递(Spring MVC会尝试从HTTP请求中提取数据,并自动将这些数据填充到User对象的属性中,而不是直接给user变量本身赋值(因为user是一个对象引用,赋值(针对对象)通常意味着改变引用指向的对象,而不是修改对象的内部状态))。

控制台输出:

复杂实体参数

从User类中可以看到address是个对象。

    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OK";
    }

参数传递方式如下:

控制台输出:

数组集合参数

不多介绍,自己看

数组

    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }

控制台输出:

集合

    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OK";
    }

这里的@RequestParam是必需的,因为它告诉Spring MVC期望在请求参数中找到名为hobby的多个值,并将它们收集到一个List<String>(即对象)中。但当你使用数组(即基本数据类型)作为参数时,Spring MVC有一种内置的机制来识别和处理具有相同名称的多个请求参数。

控制台输出:

日期参数

    @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "OK";
    }

控制台输出:

@DateTimeFormat参数介绍:

  • pattern:用于指定日期格式的模式字符串。
  • style:用于指定日期的样式,如短日期、中日期、长日期等。但在实际使用中,pattern属性更为常用。
  • isofallbackPatterns

JSON 参数

    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "OK";
    }

控制台输出:

@RequestBody 是 Spring MVC 中用于将 HTTP 请求体 中的内容转换为 Java 对象的注解,通常用在接收复杂 JSON 数据的场景中。

路径参数

    @RequestMapping("/path/{id}")
    public String pathParam(@PathVariable Integer id){
        System.out.println(id);
        return "OK";
    }

控制台输出:

@PathVariable 是 Spring MVC 中用于获取 URL 路径中占位符参数的注解。它将路径中的动态部分绑定到方法参数上。

多参数也是可以的。

    @RequestMapping("/path/{id}/{name}")
    public String pathParam2(@PathVariable Integer id , @PathVariable String name){
        System.out.println(id);
        System.out.println(name);
        return "OK";
    }

响应

添加准备代码

Result类:

public class Result {
    private Integer code ;//1 成功 , 0 失败
    private String msg; //提示信息
    private Object data; //数据 date

    public Result() {
    }
    public Result(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    //Getter和Setter方法...

    public static Result success(Object data){
        return new Result(1, "success", data);
    }
    public static Result success(){
        return new Result(1, "success", null);
    }
    public static Result error(String msg){
        return new Result(0, msg, null);
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

测试类:

@RestController
public class ResponseController {
      //如下测试代码
}

响应测试

    @RequestMapping("/hello")
    public Result hello(){
        System.out.println("Hello World ~");
        return Result.success("Hello World ~");
    }

    @RequestMapping("/getAddr")
    public Result getAddr(){
        Address addr = new Address();
        addr.setProvince("广东");
        addr.setCity("深圳");
        return Result.success(addr);
    }

    @RequestMapping("/listAddr")
    public Result listAddr(){
        List<Address> list = new ArrayList<>();

        Address addr = new Address();
        addr.setProvince("广东");
        addr.setCity("深圳");

        Address addr2 = new Address();
        addr2.setProvince("陕西");
        addr2.setCity("西安");

        list.add(addr);
        list.add(addr2);
        return Result.success(list);
    }

测试结果:

好久前学的黑马课程的总结
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇