Spring MVC 框架学习(四)----连接程序

2022-08-23 15:44:20 浏览数 (1)

文章目录

  • SpringMVC 框架学习(四)---- 连接程序
  • 1、标识后端控制器
  • 2、实现客户与程序的互联互通
  • (1)@RequestMapper
  • (2)@ResponseBody
  • (3)不同的访问目录
  • 总结
  • 解决控制器返回中文数据乱码的情况
    • 错误的方案
    • 注解加属性解决
  • (4)@RequestMapping 接收的是GET 还是 POST ?
  • (5)@RequestMapping 指定方法的方式
    • 1、通过 method 属性设置
    • 2、通过@GetMapping等注解达到同样的效果
    • 3、@RequestMapping 和 @GetMapping 的区别

SpringMVC 框架学习(四)---- 连接程序

1、标识后端控制器

@Controller

相当于替代了 HandlerMapping 和 HandlerAdapter 的作用,同时将这个类 托管到 Spring 的容器中管理

2、实现客户与程序的互联互通

(1)@RequestMapper

@RequestMapping 是 Spring Web应用程序中最常用到的注解之一,是用来注册接口的路由映射的。

既能修饰一个类也能修饰一个方法。

如果在类和方法上面都加上@ReestMapper,那么访问的时候就有多级目录了

(2)@ResponseBody

与 @RequestMapping 搭配使用,可以返回一个非页面的数据,比如说返回一个字符串,JSON格式的数据等等。

在默认情况下 @RequestMapping 返回的是页面

(3)不同的访问目录

方法上面加上映射@RequestMapping,访问时一级目录访问

代码语言:javascript复制
package com.bit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController{

   @RequestMapping("/hi")
   @ResponseBody
    public String hello(){
       return "Hello SpringMVC";
   }

}

类和方法上都加上 @RequestMapping,两级目录访问接口

代码语言:javascript复制
package com.bit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/aaaa")
public class HelloController{

   @RequestMapping("/hi")
    @ResponseBody
  public String hello(){
       return "Hello SpringMVC";
   }

}

总结

1、@RequestMapping 的作用就是用来注册一个 url 路由,通过这个路由,前端的请求可以实现和后端程序的交互了。而@RequestMapping 这个注解既能修饰方法,又能修饰类。

2、默认情况下使用@RequestMapping 会返回一个 html页面,当加上ResponseBody 注解之后就能返回非页面的数据了。

3、@ResponseBody 也能修饰方法和类,当修饰类的时候,表示此类中的所有方法都会返回一个非页面的数据。(前后端分离,后端只返回数据)

解决控制器返回中文数据乱码的情况

错误的方案

在Controller中修改响应头Content-Type的值为"text/html;charset=utf-8"

修改之后,乱码问题还是没有解决

注解加属性解决

在Controller中的@RequestMapping注解添加produces = “text/html;charset=utf-8”。代码如下所示

代码语言:javascript复制
@RequestMapping(value="/hello",produces="text/html;charset=utf8")

produces属性能够指定返回数据的类型, 还可以指定返回值的编码 ,能够成功解决响应中文相应乱码问题

@ReuqestMapping 各属性作用详情可以看下面这篇博客

(2https://blog.csdn.net/lzb348110175/article/details/88552507条消息) 2.@RequestMapping各个属性的使用_扛麻袋的少年的博客-CSDN博客_requestmapping属性

(4)@RequestMapping 接收的是GET 还是 POST ?

我们写一个具体的控制器,没有指定传递的方法是什么,传递name参数,使用postman发送GET请求

代码语言:javascript复制
package com.bit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
public class HelloController{

    @RequestMapping(value = "/hi",produces = "text/html;charset=utf8")
    public String hello(String name){
        return "你好 " name;
    }


}

发送GET请求之后的结果,成功接受了GET请求

发送POST请求之后的结果,也能成功接收

说明 在没有指定方法的情况下,@RequestMapping 任意类型的方法都能接收。

同时,@Request Mapping 通过Method属性可以指定接收对应的方法,如果指定了GET,发送了POST,那么就会报405 方法不接受异常。

代码语言:javascript复制
   @RequestMapping(value = "/hi",produces = "text/html;charset=utf8",method = RequestMethod.GET)
    public String hello(String name){
        return "你好 " name;
    }

通过postman发送 post请求,结果显示405报错,方法不允许

@RequestMapping的请求方式

(1)如果方法上的@RequestMapping注解没有设置method属性,则get和post请求默认都可以访问。任何请求都能访问接收。

(2)如果方法上的@RequestMapping注解设置了method属性,则只能是相应的请求方式可以访问。

(5)@RequestMapping 指定方法的方式

1、通过 method 属性设置

在@RequestMapping 注解的属性中 存在 method可以进行 设置指定接收的方法

2、通过@GetMapping等注解达到同样的效果

spring MVC 中还可以通过 @GetMapping、 @PostMapping 等一系列注解达到相同的效果

代码语言:javascript复制
    @GetMapping(value = "/hi",produces = "text/html;charset=utf8")
    public String hello(String name){
        return "你好 " name;
    }

发送post请求之后访问失败

3、@RequestMapping 和 @GetMapping 的区别

  • @RequestMapping 支持任意一种类型请求(GET、POST、PUT)
  • @GetMapping 只支持get方式的请求
  • @ReuqestMapping 既支持修饰 方法 ,也支持修饰 ,@GetMapping 只支持修饰 方法

0 人点赞