Java EE 进阶:Spring MVC(1)
目录
@RequestMapping即是Get请求,又是Post请求
基于Spring官网的解释:Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC".
MVC
MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分
比如:我们去餐厅吃饭,在服务员那点单,服务员叫做view,服务员把点好的单交给前台,前台通过选择将单子交给后厨,前台叫做controller,后厨把饭做好叫做model
Spring MVC
Spring MVC的项目创建和Spring Boot的项目创建相同,在创建的时候选择Spring Web就相当于创建了Spring MVC的项目
建立一个HelloController类,来实现浏览器和程序的交互
package com.blame.spring.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
package com.blame.spring.demo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hys/lr")
public String hello(){
return "hello hys";
}
}
在浏览器中打开
@RequestMapping注解
@RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的
表示服务收到请求,路径为/hys/lr的请求就会调用 hys/lr 这个方法的代码
注:既然@RequestMapping这个注解已经能达到作用,为什么还要加@RestController注解呢,
我们可以把这个注解删除
Spring会对所有的类进行扫描,只会去看加了@RestController注解的类其中的方法是否家@RequestMapping注解,如果不加的话,就不会去看,更别提其中的方法了
@RequestMapping
@RequestMapping既可以修饰类,也可以修饰方法,当修饰类的时候,访问的地址路径是类的路径+方法的路径
package com.blame.spring.demo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/user")
@RestController
public class UserInfo {
@RequestMapping("/m1")
public String m1(){
return "m1";
}
}
注:为什么要加 “ / ”,因为网站的访问路径是多层,以 / 来进行分割,所以我们可以手动的加上,比如 http:127.0.0.1:8080/user/m1
@RequestMapping即是Get请求,又是Post请求
Get请求:
向服务器请求资源或数据,获得信息,不会对服务器的资源或者数据造成修改。
Post请求:
向服务器提交数据,一般用于提交表格,上传文件,会对服务器的数据进行修改
什么是Postman?
就是后端开发工程师用于测试自己的程序,Postman就是一种专业的测试接口的工具
通过Postman这个软件我们可以测试
发送Post请求
发送Get请求
只支持Get请求的方法
方法一:
@RequestMapping(value = "/m2",method = RequestMethod.GET)
public String m2(){
return "m2";
}
Get请求发送成功
Post请求发送不成功
方法二:
@GetMapping("/m4")
public String m4(){
return "m4/";
}
Get请求发送成功
Post请求发送不成功
只支持Post请求的方法
方法一:
@RequestMapping(value = "/m3",method=RequestMethod.GET)
public String m3(){
return "/m3";
}
Get请求发送不成功
Post请求发送成功
方法二:
@PostMapping("/m5")
public String m5(){
return "m5/";
}
Get请求发送不成功Post请求发送成功
传参的介绍
传递单个参数
@RestController
@RequestMapping
public class RequestController {
@RequestMapping("/t1")
public String t1(String keyword){
return "接收参数"+keyword;
}
}
可以通过浏览器发送请求来设置参数的值
也可以通过Postman设置参数的值
注:参数一定要一致,如果不一致,就不能拿到想要的值。
传递多个参数
@RequestMapping("/t2")
public String t2(String username,String password){
return "接收参数: 用户名"+username + "密码"+password;
}
设置参数
传递对象
如果传递多个参数,声明方法就需要很多的参数,这样我们可以把这些参数进行封装
public class UseInfo {
private String name;
private int gender;
private int age;
public UseInfo(String name, int gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "UseInfo{" +
"name='" + name + '\'' +
", gender=" + gender +
", age=" + age +
'}';
}
}
@RequestMapping("/t5")
public String t5(UseInfo useInfo){
return useInfo.toString();
}
后端的参数重命名
我们在前段就收到的参数,由于参数的命名不具有代表性,我们可以进行参数的重命名
将参数q重命名为keyword
@RequestMapping("/t6")
public String t6(@RequestParam(value = "q",required = false)String keyword){
return keyword;
}
传递数组
@RequestMapping("/t7")
public String t7(String[] arr){
return Arrays.toString(arr);
}
传递集合
@RequestMapping("/t8")
public String t8(@RequestParam List<String> list){
return "接收参数: list="+ list;
}
传递JSON数据
什么是JSON数据
JSON就是⼀种数据格式,有⾃⼰的格式和语法,使⽤⽂本表⽰⼀个对象或数组的信息,因此 JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.
用JSON的语法写的数据
{
"user": {
"id": 1,
"name": "张三",
"age": 28,
"email": "zhangsan@example.com"
},
"address": {
"street": "北京市朝阳区建国路",
"city": "北京",
"postalCode": "100000"
},
"preferences": {
"newsletter": true,
"notifications": false,
"theme": "dark"
},
"orders": [
{
"orderId": "A123",
"date": "2025-01-15",
"totalAmount": 99.99,
"items": [
{
"productId": "P001",
"quantity": 2,
"price": 19.99
},
{
"productId": "P002",
"quantity": 1,
"price": 59.99
}
]
}
]
}
注:JSON和JavaScript没有关系,只是语法相似
JSON字符串和Java对象的转换
JSON->Java
@Test
void TestJsonToObject() throws JsonProcessingException {
ObjectMapper objectMapper=new ObjectMapper();
//定义一个Json字符串
String s = "{\"name\":\"zhangsan\",\"gender\":1,\"age\":15}";
UseInfo useInfo=objectMapper.readValue(s,UseInfo.class);
System.out.println(useInfo);
}
Java->JSON
@Test
void TestObjectToJson() throws JsonProcessingException {
ObjectMapper objectMapper=new ObjectMapper();
//创建一个对象
UseInfo useInfo=new UseInfo("zhangsan",12,1);
//Java对象转JSON
String s=objectMapper.writeValueAsString(useInfo);
System.out.println(s);
}
传递JSON对象
接受JSON对象,需要使用@RequestBody注解
@RequestMapping("/t9")
public String t9(@RequestBody UseInfo useInfo){
return useInfo.toString();
}
从URL中获得参数
@PathVariable的作用请求URL路径上的数据绑定
@RequestMapping("/article/{articleId}")
public String t10(@PathVariable Integer articleId){
return "返回参数"+articleId;
}
获得多个参数
@RequestMapping("/article/{type}/{articleId}")
public String t11(@PathVariable Integer articleId,@PathVariable String type){
return "返回参数"+articleId + type;
}
上传文件
@RequestPart
@RequestMapping("/t12")
public String t12(@RequestPart MultipartFile file) throws IOException {
System.out.println(file.getOriginalFilename());
//开始上传文件
file.transferTo(new File("E:\\测试"+file.getOriginalFilename()));
return "文件传输成功";
}
希望能对大家有所帮助!!!!
原文地址:https://blog.csdn.net/blamep/article/details/145188340
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!