当前位置: 首页 > news >正文

Java高级 | 【实验二】控制器类+相关注解知识

隶属文章: Java高级 | (二十二)Java常用类库-CSDN博客

系列文章: Java高级 | 【实验一】Spring Boot安装及测试 最新-CSDN博客

一、MVC模式

MVC(Model View Controller),是软件开发的一种思想,他把软件系统分为 以下三部分:

Model(模型):用来处理程序中数据逻辑的部分

View(视图):在应用程序中,专门和浏览器进行交互,展示数据的资源

Contreller(控制器):负责协调视图和模型之间的交互主要功能是处理视图发来的请求。即,根据请求决定使用用哪一个模型来处理,以及处理完后需要跳回到哪一个视图,也就是用来连接视图和模型的

MVC 它是一种思想,而SpringMVC 它是将这种思想进行了实现SpringBoot 只是实现 SpringMVC 的一种方式。

二、SpringBoot基础之控制层Controller详解

1.Controller层主要工作

从HTTP请求中获取信息,提取参数,并将其分发给不同的处理服务(service层),并向前端返回service层处理后的数据(JSON数据或者ModelAndView对象)。

2.Controller层重要注解

   Controller层主要包含了以下6个注解。

  • @Controller
  • @RequestMapping
  • @ResponseBody
  • @RestController
  • @GetMapping
  • @PostMapping

1、@Controller

@controller注解用于标识一个Java 类是一个控制器。

2、@RequestMapping

@RequestMapping注解告知Spring的控制器类或者函数映射到哪个URL,通常@RequestMapping参数有:

(1)注解在方法上

@RestController

public class UserController {

// 映射到方法上

// localhost:8080/user/login

@RequestMapping("/user/login")  

public String login() {

    return "user login";

}

// localhost:8080/user/register

@RequestMapping("/user/register")

public String register() {

     return "user register";

 }

}

2)注解在类和方法上

@Controller
//@RestController
@ResponseBody
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/login")
    public String login() {
        return "user login";
    }
@RequestMapping("/register")

public String register() {
        return "user register";
    }
}

(3)用 @RequestMapping 处理 HTTP 的各种方法

 @RequestMapping中使用method 属性来声明HTTP请求所使用的方法类型

@RestController
@RequestMapping("/home")
public class IndexController {
    @RequestMapping(method = RequestMethod.GET)
    public String get() {
        return "Hello from get";
    }
    @RequestMapping(method = RequestMethod.DELETE)
    public String delete() {
        return "Hello from delete";
    }
    @RequestMapping(method = RequestMethod.POST)
    public String post() {
        return "Hello from post";
    }
    @RequestMapping(method = RequestMethod.PUT)
    public String put() {
        return "Hello from put";
    }
    @RequestMapping(method = RequestMethod.PATCH)
    public String patch() {
        return "Hello from patch";
    }
}

(4)@RequestMapping 来处理多个 URI

@RestController

@RequestMapping("/home")

public class MultipleMapping {

    @RequestMapping(value = {

            "",

            "/page",

            "page*",

            "view/*,**/msg"

    })

    String indexMultipleMapping() {

        return "Hello from index multiple mapping.";

    }

}

(5)带有 @RequestParam 的 @RequestMapping

@RequestParam 注解配合 @RequestMapping 一起使用,可以将请求的参数同处理方法的参数绑定在一起。

@RestController
@RequestMapping("/home/getvalue")
public class ParamRequestMapping {
    @RequestMapping(value = "/id")//http://localhost:8080/home/getvalue/id?id=1234
        // 实现请求参数 id 与 处理方法参数 personId 的绑定。
    String getIdByValue(@RequestParam("id") String personId) {
        System.out.println("ID is " + personId);
        return "Get ID from query string of URL with value element"+personId;
    }
    @RequestMapping(value = "/personId")//http://localhost:8080/home/getvalue/personId?personId=7894
    String getId(@RequestParam String personId) {
        System.out.println("ID is " + personId);
        return "Get ID from query string of URL without value element";
    }
    @RequestMapping(value = "/name")//http://localhost:8080/home/getvalue/name?person=tom
    String getName(@RequestParam(value = "person", required = true) String personName) {
        return "Required element of request param"+personName;
    }
    /*
    下面方法可以处理下列URL
    /home/name?person=xyz
    /home/name
     */
    @RequestMapping(value = "/getname")//http://localhost:8080/home/getvalue/getname?person=tom
    String getNameOfrequiredIsFalse(@RequestParam(value = "person", required = true) String personName) {
        return "Required element of request param"+personName;
    }
    /*
    下面方法是当用户没有传入person参数时,系统默认person=Tom
    /home/name?person=xyz
    /home/name
     */
    @RequestMapping(value = "/getnametwo")
    String getNameByDefaultValue(@RequestParam(value = "person", defaultValue = "John") String personName) {
        return "Required element of request param"+personName;
    }
}

(5)使用 @RequestMapping 的header属性来处理消息头

post() 方法能同时接受 text/plain 还有 text/html 的请求

@RestController

@RequestMapping("/home")

public class ControllHeader {

    @RequestMapping(value = "/head", headers = {

            "content-type=text/plain",

            "content-type=text/html"

    })

    public String post() {

        return "Mapping applied along with headers";

    }

}

(6)使用 @RequestMapping 的params属性来处理请求参数

@RestController

@RequestMapping("/switch")

public class ControllSwitch {

    @RequestMapping(value = "/fetch", params = {

            "personId=10"

    })

    String getParams(@RequestParam("personId") String id) {

        return "Fetched parameter using params attribute = " + id;

    }

    @RequestMapping(value = "/fetch", params = {

            "personId=20"

    })

    String getParamsDifferent(@RequestParam("personId") String id) {

        return "Fetched parameter using params attribute = " + id;

    }

}

getParams() 和 getParamsDifferent() 两个方法都能处理相同的一个 URL (/home/fetch) ,但是会根据 params 元素的配置不同而决定具体来执行哪一个方法。

(7)使用 @RequestMapping 处理动态 URI

@RestController

@RequestMapping("/dynamic")

public class ControllerDynamicUriValue {

    //http://localhost:8080/dynamic/fetch/10

    @RequestMapping(value = "/fetch/{id}", method = RequestMethod.GET)

    String getDynamicUriValue(@PathVariable String id) {

        System.out.println("ID is " + id);

        return "Dynamic URI parameter fetched";

    }

    //http://localhost:8080/dynamic/fetch/tye/tom

    @RequestMapping(value = "/fetch/{id:[a-z]+}/{name}", method = RequestMethod.GET)

    String getDynamicUriValueRegex(@PathVariable("name") String name) {

        System.out.println("Name is " + name);

        return "Dynamic URI parameter fetched using regex";

    }

}

3、@ResponseBody

@ResponseBody 注解表示方法的返回值应该直接写入 HTTP 响应体中,而不是被解析为视图。正常情况下,Controller类中函数返回是一个模板对象(页面),但是有时候我们希望返回值数值型(字符串或者Json格式数据),这时就需要添加@ResponseBody注解@ResponseBody注解可以添加到类或者函数上

@ResponseBody返回的是数据

4@RestController 

@RestController是一个组合注解它结合了 @Controller 和 @ResponseBody 注解的功能(就相当于把两个注解组合在一起)。在使用 @RestController 注解标记的类中,每个方法的返回值都会以 JSON 或 XML 的形式直接写入 HTTP 响应体中,相当于在每个方法上都添加了 @ResponseBody 注解。

@RestController 适用于构建 RESTful 风格的 API,其中每个方法的返回值会直接序列化为 JSON 或 XML 数据并发送给客户端。而 @Controller 适用于传统的 MVC 架构,它负责处理请求并返回相应的视图。

 @RestController下的方法默认返回的是数据格式,@Controller注解标注的类下面的方法默认返回的就是以视图为格式

什么时候需要返回的是视图,什么时候需要返回数据?

当设计 RESTful API 时,一般的原则是:

如果客户端希望获取数据(例如 JSON、XML),则返回数据。

如果客户端希望展示数据(例如 HTML 页面),则返回视图。

5、@RequestMapping

@GetMapping注解可以用于类和方法上,用于定义HTTP GET请求的URL路径。当客户端发送HTTP GET请求时,Spring Boot会自动将请求映射到具有相应URL路径的控制器方法上。

6、@PostMapping

在 Spring Boot 中,我们经常需要编写 RESTful Web 服务,以便于客户端与服务器之间的通信。为了简化 RESTful Web 服务的开发,Spring Boot 提供了 @PostMapping 注解,它可以让我们更方便地编写 POST 请求处理方法。

@PostMapping是一个组合注解,它是@RequestMapping(method = RequestMethod.POST)的缩写。它用于处理HTTP POST请求的方法,只能标注在方法上。使用@PostMapping注解的方法将仅响应POST请求。

7、@GetMapping注解

@GetMapping也是一个组合注解,它是@RequestMapping(method = RequestMethod.GET)的缩写。它用于处理HTTP GET请求的方法,也只能标注在方法上。使用@GetMapping注解的方法将仅响应GET请求。

http://www.xdnf.cn/news/789535.html

相关文章:

  • InternLM2/LM2.5/ViT/VL1.5/VL2.0笔记: 核心点解析
  • 服装产品属性描述数据集(19197条),AI智能体知识库收集~
  • ULVAC DC-10-4P 400V input 10kW DC Pulse power supply 爱发科直流电源
  • ESOP股权管理平台完整解决方案
  • 基于LLaMA-Factory和Easy Dataset的Qwen3微调实战:从数据准备到LoRA微调推理评估的全流程指南
  • 开源模型应用落地-OpenAI Agents SDK-集成Qwen3-8B(一)
  • CDGP|数据治理:实现数据“可用不可见”“流通不流失”
  • [QMT量化交易小白入门]-六十、bt实现基于不同基准指数的量化策略回测
  • BFS进阶刷题
  • Spring 中如何开启事务?
  • 嵌入式学习笔记 - freeRTOS任务栈在初始化以及任务切换时的压栈出栈过程分析
  • 黑马程序员TypeScript课程笔记1(1-10)
  • 云开发实现新闻列表小程序
  • Cat.1与Cat.4区别及应用场景
  • QLora基础与进阶指南
  • 从汇编的角度揭秘C++引用,豁然开朗
  • 简简单单探讨下starter
  • 力扣面试150题--二叉搜索树中第k小的元素
  • 视频转换新选择:XMedia Recode v3.6.1.2,绿色便携版来袭
  • 【分布式技术】KeepAlived高可用架构科普
  • java复习 01
  • [Java 基础]打印金字塔
  • 股票指数期货的变动与股票价格指数的关系是什么?
  • Unity Version Control UVC报错:Not connected. Trying to re-connect…
  • 【刷机】从pixel刷回miui12的过程记录
  • git管理
  • 面试经验 对常用 LLM 工具链(如 LlamaFactory)的熟悉程度和实践经验
  • Neo4j 备份与恢复:原理、技术与最佳实践
  • MS9280,替代AD9280,10bit、35MSPS 模数转换器
  • 6.3 计算机网络面试题