10-请求响应-请求

主要学习以下几个部分:请求、响应和分层解耦(这里主要介绍请求部分)

RequestController.java文件

package com.malingshu.controller;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

// @RestController注解,表示该类下的方法返回的数据直接写给浏览器(如果是对象转为json数据)
@RestController
public class RequestController {
    // 原始方式
    // @RequestMapping注解,表示该方法对应的url
    @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: " + name + ", age: " + age);
        return "name: " + name + ", age: " + age;
    }
}

 

SpringBoot方式,与原始方法相比,可以自动进行类型转换,但形参的变量名要与参数名保持一致

RequestController.java文件

package com.malingshu.controller;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

// @RestController注解,表示该类下的方法返回的数据直接写给浏览器(如果是对象转为json数据)
@RestController
public class RequestController {
    // 原始方式
    // @RequestMapping注解,表示该方法对应的url
    @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: " + name + ", age: " + age);
        return "name: " + name + ", age: " + age;
    }

    // SpringBoot方式
    @RequestMapping("/simpleParamSpringBoot")
    public String simpleParamSpringBoot(String name, int age) {
        System.out.println("name: " + name + ", age: " + age);
        return "name: " + name + ", age: " + age;
    }
}

这里注意:@RequestMapping注解可以同时支持GET请求和POST请求

 

@RequestParam(name="name", required=false) String username

如果形参名称与请求参数名称不匹配,可以使用@RequestParam完成映射,需要注意@RequestParam默认情况下,name为形参名称,required为true,必选项

RequestController.java文件

package com.malingshu.controller;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

// @RestController注解,表示该类下的方法返回的数据直接写给浏览器(如果是对象转为json数据)
@RestController
public class RequestController {
    // 原始方式
    // @RequestMapping注解,表示该方法对应的url
    @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: " + name + ", age: " + age);
        return "name: " + name + ", age: " + age;
    }

    // SpringBoot方式
    @RequestMapping("/simpleParamSpringBoot")
    public String simpleParamSpringBoot(String name, int age) {
        System.out.println("name: " + name + ", age: " + age);
        return "name: " + name + ", age: " + age;
    }

    // 如果请求参数名和方法参数名不一致,可以使用@RequestParam注解
    @RequestMapping("/simpleParamSpringBoot2")
    public String simpleParamSpringBoot2(@RequestParam(name="name", required=false) String username, int age) {
        System.out.println("username: " + username + ", age: " + age);
        return "username: " + username + ", age: " + age;
    }
}

 

User.java文件(定义User实体类)

package com.malingshu.entity;

public class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

RequestController.java文件

package com.malingshu.controller;

import com.malingshu.entity.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

// @RestController注解,表示该类下的方法返回的数据直接写给浏览器(如果是对象转为json数据)
@RestController
public class RequestController {

    // 实体参数
    @RequestMapping("/simpleParamEntityParam")
    public String entityParam(User user) {
        System.out.println(user);
        return user.toString();
    }
}

 

Address.java文件(定义Address实体类) 

package com.malingshu.entity;

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

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

User2.java文件(定义User2实体类)

package com.malingshu.entity;

public class User2 {
    private String name;
    private int age;
    private Address address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

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

RequestController.java文件

package com.malingshu.controller;

import com.malingshu.entity.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

// @RestController注解,表示该类下的方法返回的数据直接写给浏览器(如果是对象转为json数据)
@RestController
public class RequestController {

    // 复杂实体参数
    @RequestMapping("/complexParamEntityParam")
    public String complexParamEntityParam(User2 user) {
        System.out.println(user);
        return user.toString();
    }
}

 

RequestController.java文件

package com.malingshu.controller;

import com.malingshu.entity.User;
import com.malingshu.entity.User2;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;

// @RestController注解,表示该类下的方法返回的数据直接写给浏览器(如果是对象转为json数据)
@RestController
public class RequestController {

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

RequestController.java文件

package com.malingshu.controller;

import com.malingshu.entity.User;
import com.malingshu.entity.User2;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

// @RestController注解,表示该类下的方法返回的数据直接写给浏览器(如果是对象转为json数据)
@RestController
public class RequestController {
  
    // 数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby) {
        System.out.println(Arrays.toString(hobby));
        return Arrays.toString(hobby);
    }

    // 集合参数
    @RequestMapping("/listParam")
    // @RequestParam注解,表示请求参数
    public String listParam(@RequestParam List<String> hobby) {
        System.out.println(hobby.toString());
        return hobby.toString();
    }
}

 上述用到@RequestParam注解的场景

1)如果形参名称与请求参数名称不匹配,可以使用@RequestParam完成映射,需要注意@RequestParam默认情况下,name为形参名称,required为true,必选项

@RequestParam(name="name", required=false) String username

2)集合参数,请求参数名与形参中的集合变量名相同,通过@RequestParam绑定参数关系

@RequestParam List<String> hobby

 

 

Address.java文件(定义Address实体类) 

package com.malingshu.entity;

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

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

Student.java文件(定义Student实体类)

Address.java文件(定义Address实体类) 

package com.malingshu.entity;

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

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}
User2.java文件(定义User2实体类)

RequestController.java文件

package com.malingshu.controller;

import com.malingshu.entity.Student;
import com.malingshu.entity.User;
import com.malingshu.entity.User2;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

// @RestController注解,表示该类下的方法返回的数据直接写给浏览器(如果是对象转为json数据)
@RestController
public class RequestController {

    // JSON参数
    @RequestMapping("/jsonParam")
    // @RequestBody注解,表示请求体,即将json格式的请求数据封装为实体类对象
    public String jsonParam(@RequestBody Student stu) {
        System.out.println(stu);
        return stu.toString();
    }
}

 

这里需要注意的是:json字符串对象,前面的key值是用双引号包起来的

 

 

 

 

 

 

 

 

 

 

posted @ 2024-04-14 08:44  马铃薯1  阅读(6)  评论(0编辑  收藏  举报