自学内容网 自学内容网

Java EE 进阶:Spring MVC(1)

目录

MVC

Spring MVC

@RequestMapping

@RequestMapping即是Get请求,又是Post请求

只支持Get请求的方法

只支持Post请求的方法

传参的介绍

传递单个参数

传递多个参数 

传递对象

后端的参数重命名

传递数组

 传递集合

传递JSON数据

JSON字符串和Java对象的转换

传递JSON对象

从URL中获得参数

获得多个参数

上传文件 

基于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)!