SpringMVC的注解

文章目录

  • 前言
  • 前期准备
    • @ResponseBody 返回JSON
    • @RequestMapping 映射控制器
    • @GetMapping、@PostMapping


前言

提示:这里可以添加本文要记录的大概内容:

SpringMVC框架只需要少量的配置即可快速实现Web应用程序开发,不需要大量的XML配置文件。

不必再写转型,统一JSON格式(前后端分离项目)

前期准备

第一步:新建项目Maven项目
在这里插入图片描述
在下一步中勾选第一个选项,创建一个简单的项目,最后填写相关信息后完成
请添加图片描述
项目创建完后后有个报错,缺个配置文件

增加一个插件即可

第二步:完善 pom.xml 文件

项目建成后在 pom.xml 文件中导入相关代码,比如:

缺什么加什么

<dependencies><!-- 此依赖会关联引用Spring中的所有基础jar包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.8.RELEASE</version></dependency><!-- spring-webmvc会依赖spring-web --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.8.RELEASE</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.0</version><scope>provided</scope></dependency><!-- 单元测试Junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins>
</build>

等插件下载完后如果项目还有错,那是因为项目和插件之间不是实时更新,接下来选择强制更新一下
请添加图片描述
第三步:config 配置

在src/main/java 文件夹下新建包 com.springmvc,然后再新建 config 包

在 config 包下新建两个类:

MvcConfig.java

package com.springmvc.config;import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.*;import com.springmvc.interceptor.MyInterceptor;@Configuration
// 当包名被改变时,这里也需要被改变
@ComponentScan("com.springmvc")
@EnableWebMvc //使用EnableWebMvc开启springmvc注解方式配置
public class MvcConfig implements WebMvcConfigurer {/*** 跨域设置*/public void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedHeaders("*").allowedOrigins("*").allowCredentials(true);}/*** 添加拦截器(可以添加多个)*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");}/*** 配置文件上传解析器*/@Beanpublic CommonsMultipartResolver multipartResolver() {CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();// 设置上传单个文件的大小限制,单位:字节     倒序:KB*MB*10,这里是10MBcommonsMultipartResolver.setMaxUploadSizePerFile(10 * 1024 * 1024);// 设置上传文件的总大小,单位:字节    这里是100MBcommonsMultipartResolver.setMaxUploadSize(100 * 1024 * 1024);return commonsMultipartResolver;}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {StringHttpMessageConverter converter = new StringHttpMessageConverter();converter.setDefaultCharset(Charset.forName("UTF-8"));List<MediaType> list = new ArrayList<MediaType>();list.add( MediaType.APPLICATION_JSON);converter.setSupportedMediaTypes(list);converters.add(converter);// JSON转换器converters.add(new MappingJackson2HttpMessageConverter()); }
}

MvcInit.java

package com.springmvc.config;import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;import javax.servlet.Filter;/*** ①:1、创建Mvc初始化类,需要继承AbstractAnnotationConfigDispatcherServletInitializer类*/
public class MvcInit extends AbstractAnnotationConfigDispatcherServletInitializer {/*** springmvc容器的父容器spring配置类* 实际工作中我们的项目比较复杂,可以将controller层放在springmvc容器中* 其他层,如service层、dao层放在父容器了,bean管理起来更清晰一些* 也可以没有父容器,将所有bean都放在springmvc容器中** @return*/@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[0];}/*** ②:2、设置springmvc容器的spring配置类** @return*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{MvcConfig.class};}/*** ③:3、配置DispatcherServlet的url-pattern** @return*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}/*** ④:4、注册拦截器** @return*/@Overrideprotected Filter[] getServletFilters() {//添加拦截器,解决乱码问题CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();characterEncodingFilter.setEncoding("UTF-8");characterEncodingFilter.setForceRequestEncoding(true);characterEncodingFilter.setForceResponseEncoding(true);return new Filter[]{characterEncodingFilter};}
}

提示:以下是本篇文章正文内容,下面案例可供参考

@ResponseBody 返回JSON

在src/main/java 文件夹下新建 controller包,在controller包下新建一个类

@Controller
public class HelloController {// URL请求地址@RequestMapping("/hello") //转JSON格式@ResponseBody public String hi() {System.out.println("请求已到达");return "还好吧";}
}

Tomcat启动,有这条信息代表启动成功(初始化 dispatcher )
在这里插入图片描述
运行结果:
在这里插入图片描述

原来在写controller包时,只能指定一个路径,现在可以指定多个

再写一个方法:

	@RequestMapping("/test") @ResponseBodypublic String test() {System.out.println("test请求已到达");return "abcdefg";}

在这里插入图片描述

@RequestMapping 映射控制器

@RequestMapping注解在处理器类上可以设置请求URL的父路径,而在处理器类的某个方法上使用@RequestMapping注解则可以设置请求URL的第二级访问目录,这样可以实现更细粒度的控制。这样做可以实现URL的模块化管理,提高代码的可维护性和可扩展性。

先写 po 包:

public class Food {private Integer foodId;private String foodName;private Double foodPrice;// 自动生成 Getter、Setter、toString()、有参无参方法
}

再写 controller 包:

@Controller
@RequestMapping("/food")
public class MapperController {}

增加食品请求:

	@RequestMapping("/add")@ResponseBodypublic String add() {System.out.println("处理增加食品请求");return "增加成功";}

测试:
在这里插入图片描述

删除食品请求:

	@RequestMapping("/remove")@ResponseBodypublic String remov() {System.out.println("处理删除食品请求");return "删除成功";}

测试:

在这里插入图片描述

修改食品请求:

	@RequestMapping("/update")@ResponseBodypublic String update() {System.out.println("处理修改食品请求");return "修改成功";}

测试:
在这里插入图片描述

查询食品请求:

	@RequestMapping("/query")@ResponseBodypublic List<Food> query(){System.out.println("处理查询食品请求");List<Food> list = new ArrayList<Food>();list.add(new Food(1, "羊肉锅", 49.9));list.add(new Food(2, "小龙虾", 46.8));list.add(new Food(3, "肚包肉", 39.8));return list;}

在这里插入图片描述

@GetMapping、@PostMapping

@GetMapping:只处理 get 请求
@PostMapping:只处理 post 请求

比如把上面的增加删除方法改一下,把@RequestMapping分别改成@GetMapping@PostMapping

	@PostMapping("/add")@ResponseBodypublic String add() {System.out.println("处理增加食品请求");return "增加成功";}

添加测试:这样添加方法就只能选择POST了
在这里插入图片描述

如果还是 get 请求会引起 405 报错(方法用错了)
在这里插入图片描述

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

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

相关文章

电脑第一次使用屏幕键盘

操作流程 1.在键盘上同时按WinR打开运行; 2.输入control 3.找到设置中心 4.点击屏幕键盘 效果 具体怎么使用 我不咋清除 简单 测试了一下 可以用鼠标点击屏幕键盘的按键 用键盘 按字母键和数字键 是和屏幕键盘不同步的 其他 tab、shift、后退、enter好像同步

分立式BUCK电路原理与制作持续更新

一、分立式BUCK电路总体原理图 下面改图包含了电压环和电流环。 二、BUCK电路与LDO的区别 LDO不适合在压差大的环境下使用&#xff0c;因为三极管因为CE极承受了压差&#xff0c;压差越大损耗的功率就越大&#xff0c;将三极管换成MOS管&#xff0c;MOS管两端的压差很小所以效…

梳理日常开发涉及的负载均衡

负载均衡是当前分布式微服务时代最能提及的词之一&#xff0c;出于对分层、解耦、弱依赖、可配置、可靠性等概念的解读&#xff0c;一对一的模式变得不再可信赖&#xff0c;千变万化的网络环境中&#xff0c;冗余和备份显得格外重要&#xff0c;稍大型的系统就会存在大量微服务…

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度&#xff0c;减少内存占用 TextBrewer是一个基于PyTorch的、为实现NLP中的知识蒸馏任务而设计的工具包&#xff0c; 融合并改进了NLP和CV中的多种知识蒸馏技术&#xff0…

C高级-day4

#!/bin/bash function fun1(){arr[0]id -u $1arr[1]id -g $1echo ${arr[*]} }arr(fun1 ubuntu) echo ${arr[*]}冒泡排序 void Maopao(int arr[],int len){for(int i1;i<len;i){int count0;for(int j0;j<len-i;j){if(arr[j]>arr[j1]){int tarr[j];arr[j]arr[j1];arr[j…

智能优化算法——哈里鹰算法(Matlab实现)

目录 1 算法简介 2 算法数学模型 2.1.全局探索阶段 2.2 过渡阶段 2.3.局部开采阶段 3 求解步骤与程序框图 3.1 步骤 3.2 程序框图 4 matlab代码及结果 4.1 代码 4.2 结果 1 算法简介 哈里斯鹰算法(Harris Hawks Optimization&#xff0c;HHO)&#xff0c;是由Ali…

如何解决 Elasticsearch 查询缓慢的问题以获得更好的用户体验

作者&#xff1a;Philipp Kahr Elasticsearch Service 用户的重要注意事项&#xff1a;目前&#xff0c;本文中描述的 Kibana 设置更改仅限于 Cloud 控制台&#xff0c;如果没有我们支持团队的手动干预&#xff0c;则无法进行配置。 我们的工程团队正在努力消除对这些设置的限制…

arcgis宗地或者地块四至权利人信息提取教程

ARCGIS怎样将图斑四邻的名称及方位加入其属性表 以前曾发表过一篇《 如何把相邻图斑的属性添加在某个字段中》的个人心得,有些会员提出了进一步的要求,不但要相邻图斑的名称,还要求有方位,下面讲一下自己的做法。 基本思路是:连接相邻图斑质心,根据连线的角度确定相邻图斑…

c++游戏制作指南(三):c++剧情类文字游戏的制作

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f35f;欢迎来到静渊隐者的csdn博文&#xff0c;本文是c游戏制作指南的一部&#x1f35f; &#x1f355;更多文章请点击下方链接&#x1f355; &#x1f368; c游戏制作指南&#x1f3…

21、p6spy输出执行SQL日志

文章目录 1、背景2、简介3、接入3.1、 引入依赖3.2、修改database参数&#xff1a;3.3、 创建P6SpyLogger类&#xff0c;自定义日志格式3.4、添加spy.properties3.5、 输出样例 4、补充4.1、参数说明 1、背景 在开发的过程中&#xff0c;总希望方法执行完了可以看到完整是sql语…

供水管网漏损监测,24小时保障城市供水安全

供水管网作为城市生命线重要组成部分&#xff0c;其安全运行是城市建设和人民生活的基本保障。随着我国社会经济的快速发展和城市化进程的加快&#xff0c;城市供水管网的建设规模日益增长。然而&#xff0c;由于管网老化、外力破坏和不当维护等因素导致的供水管网漏损&#xf…

js修改img的src属性显示变换图片到前端页面,img的src属性显示java后台读取返回的本地图片

文章目录 前言一、HTML 图像- 图像标签&#xff08; <img>&#xff09;1.1图像标签的源属性&#xff08;Src&#xff09;1.2图像标签源属性&#xff08;Src&#xff09;显示项目中图片1.3图像标签源属性&#xff08;Src&#xff09;显示网络图片 二、图像标签&#xff08…

Docker实战-关于Docker镜像的相关操作(二)

导语   之前的分享中&#xff0c;我们介绍了关于Docker镜像的查询操作相关的内容&#xff0c;下面我们继续来介绍删除清理、导入导出、创建镜像等操作。 如何删除和清理镜像&#xff1f; 使用标签删除镜像 可以使用docker rmi 或者是 docker image rm 命令来删除镜像&#x…

segment-anything使用说明

文章目录 一. segment-anything介绍二. 官网Demo使用说明三. 安装教程四. python调用生成掩码教程五. python调用SAM分割后转labelme数据集 一. segment-anything介绍 Segment Anything Model&#xff08;SAM&#xff09;根据点或框等输入提示生成高质量的对象遮罩&#xff0c…

spring eurake中使用IP注册

在开发spring cloud的时候遇到一个很奇葩的问题&#xff0c;就是服务向spring eureka中注册实例的时候使用的是机器名&#xff0c;然后出现localhost、xxx.xx等这样的内容&#xff0c;如下图&#xff1a; eureka.instance.perferIpAddresstrue 我不知道这朋友用的什么spring c…

爬虫009_字符串高级_替换_去空格_分割_取长度_统计字符_间隔插入---python工作笔记028

然后再来看字符串的高级操作 取长度 查找字符串下标位置 判断是否以某个字符,开头结尾 计算字符出现次数 替换

sigmoid ReLU 等激活函数总结

sigmoid ReLU sigoid和ReLU对比 1.sigmoid有梯度消失问题&#xff1a;当sigmoid的输出非常接近0或者1时&#xff0c;区域的梯度几乎为0&#xff0c;而ReLU在正区间的梯度总为1。如果Sigmoid没有正确初始化&#xff0c;它可能在正区间得到几乎为0的梯度。使模型无法有效训练。 …

什么是OCR?OCR技术详解

光学字符识别(Optical Character Recognition)简称为“OCR”。ORC是指对包含文本资料的图像文件进行分析识别处理&#xff0c;获取文字及版面信息的技术。 一般包括以下几个过程&#xff1a; 1.图像输入 针对不同格式的图像&#xff0c;有着不同的存储格式和压缩方式。目前&…

TypeScript学习笔记

1.ts和js的区别 2. ts的优势 3. ts下载后报错解决方法 报错: PS C:\Users\\Desktop> tsc -v tsc : 无法加载文件 C:\Users\32173\AppData\Roaming\npm\tsc.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/ go.microsoft.com/fwlink/?…

接口测试——电商网站接口测试实战(四)

1. 接口测试需求分析 常见接口文档提供的两种方式 ①word文档 ②在线文档 电商网站网址模拟练习&#xff1a;Swagger UI 2. 登陆的分析 慕慕生鲜网址&#xff1a;慕慕生鲜账号密码点击execute后 输入账号密码后点击开发者工具&#xff0c;再登录&#xff0c;点击网络&…