Spring MVC中常用注解

文章目录

    • Spring MVC 框架提供了一系列注解,用于简化开发者的编码工作,并提高代码的可读性和可维护性。以下是 Spring MVC 中常用的注解:
      • @Controller:
      • @RestController:
      • @RequestMapping:
      • @PathVariable:
      • @RequestParam:
      • @RequestBody:
      • @ResponseBody:
      • @ModelAttribute:
      • @SessionAttributes:
      • @Valid:
      • @InitBinder:
      • @ExceptionHandler:
      • @DateTimeFormat:
      • @EnableWebMvc:

Spring MVC 框架提供了一系列注解,用于简化开发者的编码工作,并提高代码的可读性和可维护性。以下是 Spring MVC 中常用的注解:

@Controller:

用于标识一个类为控制器,通常用于处理用户请求。

@Controller
public class MyController {@GetMapping("/hello")public String hello() {return "hello";}
}

@RestController:

@RestController注解实际上相当于@Controller和@ResponseBody注解的组合。它的作用是将一个控制器类标识为RESTful风格的控制器,并指示Spring将控制器方法的返回值直接转换为JSON或XML格式,并将其作为HTTP响应返回给客户端

@RestController
public class MyRestController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}

@RequestMapping:

用于映射HTTP请求URL到控制器的处理方法上,可以用于类级别和方法级别。常用属性包括value(URL路径)、method(请求方法)、params(请求参数)、headers(请求头)等。

@Controller
@RequestMapping("/example")
public class ExampleController {@GetMapping("/hello")public String hello() {return "hello";}
}

@PathVariable:

用于将URL路径中的占位符绑定到控制器方法的参数上,常用于获取RESTful风格URL中的参数。

@Controller
public class MyController {@GetMapping("/hello/{name}")public String hello(@PathVariable("name") String name) {return "Hello, " + name + "!";}
}

@RequestParam:

用于将请求参数绑定到控制器方法的参数上,常用于获取HTTP请求中的参数值。

@Controller
public class MyController {@GetMapping("/hello")public String hello(@RequestParam("name") String name) {return "Hello, " + name + "!";}
}

@RequestBody:

用于将HTTP请求体中的数据绑定到控制器方法的参数上,常用于处理POST请求中的JSON或XML数据。

@RestController
public class MyRestController {@PostMapping("/user")public String createUser(@RequestBody User user) {return "User created: " + user.toString();}
}

@ResponseBody:

用于将控制器方法的返回值直接转换为JSON或XML格式,并将其作为HTTP响应返回给客户端。

@Controller
public class MyRestController {@GetMapping("/hello")@ResponseBodypublic String hello() {return "Hello, World!";}
}

@ModelAttribute:

用于将请求参数绑定到模型对象上,通常用于将表单数据传递给控制器方法。

@Controller
public class MyController {@PostMapping("/user")public String createUser(@ModelAttribute User user) {return "User created: " + user.toString();}
}

@SessionAttributes:

用于指定控制器类中哪些模型属性需要存储在会话(Session)中,以便多个请求之间共享数据。

@Controller
@SessionAttributes("user")
public class MyController {@GetMapping("/setUser")public String setUser(Model model) {User user = new User("John");model.addAttribute("user", user);return "user";}@GetMapping("/getUser")public String getUser(@ModelAttribute("user") User user) {return "Hello, " + user.getName() + "!";}
}

@Valid:

用于启用数据验证功能,并将验证结果存储到BindingResult对象中。

@Controller
public class MyController {@PostMapping("/user")public String createUser(@Valid @ModelAttribute User user, BindingResult result) {if (result.hasErrors()) {return "error";}return "User created: " + user.toString();}
}

@InitBinder:

用于自定义数据绑定规则,通常用于注册自定义的属性编辑器(PropertyEditor)或校验器(Validator)。

@Controller
public class MyController {@PostMapping("/user")public String createUser(@Valid @ModelAttribute User user, BindingResult result) {if (result.hasErrors()) {return "error";}return "User created: " + user.toString();}
}

@ExceptionHandler:

用于处理控制器方法中抛出的异常,可用于定义全局异常处理器或局部异常处理器。

@Controller
public class MyController {@ExceptionHandler(Exception.class)public String handleException(Exception ex) {return "error";}@GetMapping("/hello")public String hello() throws Exception {throw new Exception("Something went wrong");}
}

@DateTimeFormat:

接收形参时,根据不同的日期格式设置不同的接收方式

//日期参数 http://localhost:80/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08
//使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,@DateTimeFormat(pattern="yyyy-MM-dd") Date date1,@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){System.out.println("参数传递 date ==> "+date);System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);return "{'module':'data param'}";
}

注意事项

传递日期类型参数必须在配置类上使用@EnableWebMvc注解。其功能之一:根据类型匹配对应的类型转换器。

@EnableWebMvc:

开启自动转换json数据的支持

@Configuration
@ComponentScan("com.itheima.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}

注意事项:

@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换

在Controller中编写方法接收json参数

//集合参数:json格式
//1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
//2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){System.out.println("list common(json)参数传递 list ==> "+likes);return "{'module':'list common for json param'}";
}

@EnableWebMvc注解介绍

  • 名称:@EnableWebMvc
  • 类型:配置类注解
  • 位置:SpringMVC配置类定义上方
  • 作用:开启SpringMVC多项辅助功能
  • 范例:
@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dp7——博弈

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 博弈dp需要记录玩家的转换 下位01 486. 预测赢家⭐思想⭐相似题目464. 我能赢吗877. 石子游戏 博弈 dp需要记录玩家的转换 下位 01 486. 预测赢家⭐ 思想⭐ dp定义的是当前玩家 如dp[i] 代表A 则dp[i 1] 代表…

多模态大模型Claude 3正式接入集简云与语聚!对标GPT-4且支持中文

自OpenAI发布GPT-4以来&#xff0c;引发了业务模式与应用使用的巨大变革&#xff0c;掀起了各大企业对于多模态大模型的研究热潮。3月初&#xff0c;AnthropicClaude在官网正式发布Claude 3系列多模态大模型&#xff0c;据了解&#xff0c;该模型在多个维度上超越了GPT-4&#…

Open3D国内镜像源

pip install open3d -i https://mirrors.aliyun.com/pypi/simple/ 国内常用镜像源 清华大学 &#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云&#xff1a;https://mirrors.aliyun.com/pypi/simple/ 中国科学技术大学 &#xff1a;http://pypi.mirrors.ustc.edu.…

高铁列车员信息宣传向媒体投稿有哪些方法?

作为一名高铁列车工作人员,我肩负着传递高铁精神、展示列车员风采的重要使命。每月,我都要完成单位对外信息宣传的考核任务,通过媒体投稿来发表列车员的信息宣传文章。在这条信息宣传之路上,我经历了从摸着石头过河到智慧投稿的蜕变,其中的心酸与轻松交织,成为了我职业生涯中难…

在Linux中进行OpenSSH升级

由于OpenSSH有严重漏洞&#xff0c;因此需要升级OpenSSH到最新版本。 OpenSSL和OpenSSH都要更新&#xff0c;OpenSSH依赖于OpenSSL。 第一步&#xff0c;查看当前的OpenSSH服务版本。 命令&#xff1a;ssh -V 第二步&#xff0c;安装、启动telnet&#xff0c;关闭安全文件&a…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的癌症图像检测系统(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;本篇博客深入介绍了如何借助深度学习技术开发癌症图像检测系统&#xff0c;以提高医疗诊断的精度和速度。系统基于先进的YOLOv8算法&#xff0c;并对比分析了YOLOv7、YOLOv6、YOLOv5的性能&#xff0c;如mAP和F1 Score。详细解释了YOLOv8的原理&#xff0c;并附…

2024年高校邦大学生职业生涯规划答案

2024年高校邦大学生职业生涯规划答案 2024年高校邦——大学生职业生涯规划答案 第一章 1多选 大学教育的价值是什么&#xff1f; A.丰富知识 B.完善人格 C.为未来的生活打下坚实基础 D.读研 答案&#xff1a;ABC 2单选 以下哪种不属于职业生涯规划的步骤&#xff1f…

如何设计一个高并发的系统--简谈

设计一个高并发系统可以从下面这些角度来考虑。 所谓设计高并发系统&#xff0c;就是设计一个系统&#xff0c;保证它整体可用的同时&#xff0c;能够处理很高的并发用户请求&#xff0c;能够承受很大的流量冲击。 我们要设计高并发的系统&#xff0c;那就需要处理好一些常见…

PHP过滤Emoji表情和特殊符号的方法

在PHP中&#xff0c;过滤掉昵称中的表情和特殊符号通常可以通过正则表达式来实现。PHP中的preg_replace函数可以使用正则表达式来搜索和替换字符串中的内容。 以下是一个例子&#xff0c;展示了如何移除字符串中的Emoji和特殊符号&#xff1a; function removeEmojiAndSpec…

Linux 命令或者一些工具

locale – 设置和显示程序运行的语言环境 locale -a | grep en_US.UTF-8.sudo locale-gen en_US.UTF-8sudo dpkg-reconfigure localesexpect 常用命令总结 expect命令spawnexpectsendexp_continuesend_userexit chrpath工具 chrpath 是一个用于修改可执行文件或共享库的运行…

JVM是如何运行的

JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;是 Java 程序的运行环境&#xff0c;它负责将 Java 字节码翻译成机器代码并执行。也就是说 Java 代码之所以能够运行&#xff0c;主要是依靠 JVM 来实现的。 JVM 整体的大概执行流程是这样的&#xff1…

国产AI视频技术迎来新成员Etna,4K 60帧 15秒超高清视频

国内AI视频技术领域传来好消息&#xff0c;一款名为Etna的AI视频生成工具引起了业界的广泛关注。这款由七火山公司开发的技术&#xff0c;号称能够实现15秒4K 60帧的超高清视频生成&#xff0c;让人眼前一亮&#xff01; &#x1f680; 国产技术的崛起 Etna的问世&#xff0c;…

C++高级面试题:解释 C++ 中的行为参数化(Behavioral Parameterization)

解释 C 中的行为参数化&#xff08;Behavioral Parameterization&#xff09; 行为参数化是一种编程模式&#xff0c;它允许在运行时动态地指定算法或函数的行为。在 C 中&#xff0c;行为参数化通常通过函数指针、函数对象&#xff08;Functors&#xff09;、Lambda 表达式等…

DLT算法求解单应性矩阵

DLT算法求解单应性矩阵 原理&#xff1a; 单应性矩阵描述了两个图像之间的投影变换关系&#xff0c;即从一张图到另一张图的变换。 下面是DLT算法的基本原理&#xff1a; 构建投影方程&#xff1a; 对于两个图像中的对应点 ( x , y , 1 ) (x, y, 1) (x,y,1) 和 ( u , v ,…

【JS】JavaScript 中 this 关键字

JavaScript 中 this 关键字 this 是什么this 的绑定规则this 的指向 this 是什么 this 是一个关键字&#xff0c;能够在函数执行过程中访问运行环境&#xff0c;它的值根据函数的调用方式和上下文而变化&#xff0c;所以 this 是动态的&#xff0c;动态指向当前函数的运行环境…

Lazada全托管是什么?Lazada全托管ERP哪个好用?

做工厂及拥有自有品牌的你&#xff0c;是否因为跨境的头程费用、仓储费用、尾程费用如何结算而烦恼&#xff1f;是否因为不懂市场、不懂运营、不够专业而对跨境电商领域望而却步&#xff1f;那么&#xff0c;你或许可以尝试全托管。 一、什么是全托管 全托管是近两年电商领域…

Python之函数进阶-柯里化

Python之函数进阶-柯里化 柯里化是一种将多参数函数转化为单参数高阶函数的技术。 具体来说&#xff0c;柯里化过程会将一个接受多个参数的函数&#xff0c;转换成一系列接受一个参数的函数&#xff0c;这些函数在内部组合起来&#xff0c;最终完成原函数的运算。 柯里化是一…

【一】【设计模式】类关系UML图

1. 继承&#xff08;Generalization&#xff09; 继承是对象间的一种层次关系&#xff0c;允许子类继承并扩展父类的功能。 UML线&#xff1a;带有空心箭头的直线&#xff0c;箭头指向基类&#xff08;父类&#xff09;。 class Parent {public void parentMethod() {System.…

AIOps 智能运维:有没有比专家经验更优雅的错/慢调用分析工具?

作者&#xff1a;图杨 工程师小 A 刚刚接手他们公司最核心的电商系统的运维工作&#xff0c;小 A 发现&#xff0c;在生产环境中&#xff0c;系统明明运行得非常稳定&#xff0c;但是总会出现一些“诡异”的情况。比如&#xff1a; 偶尔会一些错误调用&#xff0c;但是&#…

Android UI:ViewTree中的事件传递

文章目录 ViewTree: 组合模式measure事件的传递 事件传递: View/ViewGroup的measure和onMeasureLinearLayout重写onMeasureRelativeLayout重写onMeasurelayout事件的传递 事件传递:View/ViewGroup的layout和onLayout LinearLayout重写onLayout RelativeLayout重写onLayoutdraw…