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值是用双引号包起来的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现