SpringMVC(全局异常处理.动态接收Ajax请求)
1.全局异常处理
1 异常处理器 基于AOP
用户发起请求,
SpringMVC接受请求,
SpringMVC加载静态资源问题说明
请求过去了,但没有处理

规则说明:静态资源进入SpringMVC框架之后,没有找到要怎样处理静态资源的方法,所以他们就不解决,也就不显示
解决方法:SpringMVC基于Servlet处理器机制,放行静态资源,交给Servlet处理
<!-- 5.放行静态资源--><mvc:default-servlet-handler/>
2.异常处理器操作
说明: 使用AOP解决 环绕通知
try-catch的位置: 首选Controller层, 因为Dao和Service层抛出后,最终层还是在Controller层处理
基于注解 全局异常处理
@ControllerAdvice 拦截Controllre层异常
@ExceptionHandler({RunTimeException.class})拦截什么类型的异常
Result包装类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {private Integer code;private String msg;private Object data;public static Result fail(){return new Result(201,"业务调用失败",null);}public static Result success(){return new Result(200,"业务调用成功",null);}public static Result success(Object obj){return new Result(200,"业务调用正确",obj);}}
@ControllerAdvice springmvc基于aop拦截Controller中的异常信息
@ExceptionHandler 拦截什么异常
@ExceptionHandler(RuntimeException.class)前后端调用时,异常的JSON串返回
//springmvc基于aop拦截Controller中的异常信息
@ControllerAdvice
public class ExceptionAOP {
// //拦截什么异常
// @ExceptionHandler({RuntimeException.class})
// public String exception(){
// System.out.println("全局异常处理机制工作");
// return "error";
//
// }//前后端调用时,异常的JSON串返回@ExceptionHandler(RuntimeException.class)public Result exception(){return Result.fail();}
2.SpringMVC动态接收Ajax请求
1.搭建前端脚手架工程
创建项目
引入axios
创建Axios请求对象
delete和get请求格式一致
put和post请求格式一致
发起Ajax请求
2.搭建后端服务器
引入jar包 jackson
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.1</version></dependency>
解决跨域问题
核心注解: @CrossOrigin
3. 接收Ajax请求
原始接收请求实在是太麻烦 ,后面有用注解简化
/*** 思考:* 1. 前端JS发起请求* 2. 后端服务器java代码实现请求* 3. 前后端交互使用JSON串* 4. 获取用户对象进行返回*/@RequestMapping("/getMsg")public void getMsg(int id,String name,HttpServletResponse response) throws IOException {System.out.println("获取客户端数据:"+id+":"+name);ObjectMapper objectMapper = new ObjectMapper();User user = new User("admin","123456");String json = objectMapper.writeValueAsString(user);response.getWriter().write(json);}
4.前端返回值

@RequestBody
主要接收Ajax post请求
作用:将请求体里面的JSON串转化为java对象
注解写在参数当中
注意事项:json串中的属性名称,必须与对象中的属性名称一致
//如何获取请求体中的数据 JSON串 > java对象@PostMapping("/login")public User login(@RequestBody User user) throws IOException {System.out.println(user);user.setUsername("success!!!!");return user;}
@ResponseBody
将方法的返回值自动转化为JSON串
如果该注解标识在类上, 表示当前类中的所有方法 都按照JSON返回.
/*** SpringMVC 为了简化Ajax调用方式* 1.@RequestBody 将请求体中的json串 转化为Java对象* 2.@ResposeBody 将Java对象转化为JSON串返回*/@RequestMapping("/getMsg2")//@ResponseBodypublic User getMsg2(int id,String name) throws IOException {System.out.println("获取参数:"+id+":"+name);return new User("zhangsan","123456");}
5.统一数据返回值的说明
1.RestController 是ResponseBody和Controller注解的结合注解
当前类中的所有的方法按照JSON串返回
//@ResponseBody //当前类中的所有方法 都按照JSON串返回
@RestController
前后端调用时,异常的json串返回

2.RestControllerAdvice是@ResponseBody和@ExceptionHandler的结合注解
全局异常处理机制中的
//springmvc基于aop拦截Controller中的异常信息
@ControllerAdvice
public class ExceptionAOP {
// //拦截什么异常
// @ExceptionHandler({RuntimeException.class})
// public String exception(){
// System.out.println("全局异常处理机制工作");
// return "error";
//
// }//前后端调用时,异常的JSON串返回@ExceptionHandler(RuntimeException.class)public Result exception(){return Result.fail();}
package com.atguigu.controller;import com.atguigu.pojo.User;
import com.atguigu.vo.Result;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;//@Controller
@RequestMapping("/ajax")
//当前的所有的请求支持跨域访问!!!
//@CrossOrigin(value = "指定发起请求的网址是谁!!!")
@CrossOrigin
//@ResponseBody //当前类中的所有方法 都按照JSON串返回
@RestController
public class AjaxController {/*** 思考:* 1. 前端JS发起请求* 2. 后端服务器java代码实现请求* 3. 前后端交互使用JSON串* 4. 获取用户对象进行返回*/@RequestMapping("/getMsg")public void getMsg(int id,String name,HttpServletResponse response) throws IOException {System.out.println("获取客户端数据:"+id+":"+name);ObjectMapper objectMapper = new ObjectMapper();User user = new User("admin","123456");String json = objectMapper.writeValueAsString(user);response.getWriter().write(json);}/*** SpringMVC 为了简化Ajax调用方式* 1.@RequestBody 将请求体中的json串 转化为Java对象* 2.@ResposeBody 将Java对象转化为JSON串返回*/@RequestMapping("/getMsg2")//@ResponseBodypublic User getMsg2(int id,String name) throws IOException {System.out.println("获取参数:"+id+":"+name);return new User("zhangsan","123456");}//如何获取请求体中的数据 JSON串 > java对象@PostMapping("/login")public User login(@RequestBody User user) throws IOException {System.out.println(user);user.setUsername("success!!!!");return user;}/*** BufferedReader reader = request.getReader();* String data = null;* StringBuffer sbf = new StringBuffer();* while (StringUtils.hasLength(data=reader.readLine())){* sbf.append(data);* }* String json = sbf.toString();* ObjectMapper objectMapper = new ObjectMapper();* objectMapper.readValue(json,XXXX.class);*/@GetMapping("/getResult")public Result getResult(){User user = new User("zhangsan","123456");int a = 1/0;return Result.success(user);}
}
相关文章:
SpringMVC(全局异常处理.动态接收Ajax请求)
1.全局异常处理 1 异常处理器 基于AOP 用户发起请求, SpringMVC接受请求, SpringMVC加载静态资源问题说明 请求过去了,但没有处理 规则说明:静态资源进入SpringMVC框架之后,没有找到要怎样处理静态资源的方法,所以他们就不解决,也就不显示 解决方法:SpringMVC基于Servlet处理…...
【FastAPI】P1 简单实现 a+b
目录 准备工作代码运行 说明:本文通过 FastAPI 实现返回两个参数 ab 的值; 准备工作 默认读者已准备完善 Python IDE工具以及包管理工具。 首先,需要安装 fastapi 和 uvicorn 库,如果没有请使用 pip 进行安装: pip…...
C#设计模式教程(4):单例模式
单例模式(Singleton Pattern)是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个访问它的全局访问点。在C#中实现单例模式通常有几种不同的方法,这里介绍几种典型的实现方式。 C# 单例模式的各种实现方式 1. 懒汉式(线程不安全) public class Singleton {p…...
常用的git diff命令用法汇总和示例
文章目录 1. 查看工作目录和暂存区的差异2. 查看暂存区和最后一次提交的差异3. 查看两个提交之间的差异4. 查看特定文件的更改5. 查看特定文件在两个提交之间的差异6. 查看分支之间的差异7. 查看某次提交的更改8. 限制diff输出的格式9. 查看一定时间范围内的更改 Git的diff命令…...
一键式Excel分词统计工具:如何轻松打包Python脚本为EXE
一键式Excel分词统计工具:如何轻松打包Python脚本为EXE 写在最前面需求分析直接用Python打包为什么大?为什么要使用conda环境? 将Python脚本打包为一个独立的应用程序1. 编写Python脚本:初步功能实现2. 初步图形用户界面ÿ…...
Windows系统字体尺寸学习
调用GetTextMetrics来获得字体尺寸信息, 函数返回设备描述表中当前选定的字体信息; 返回值到TEXTMETRIC类型的结构中; 返回字段值的单位取决于当前设备描述表映射方式;默认映射方式是MM_TEXT,值的单位是像素; 前7个字…...
SSH隧道技术
SSH隧道 简介 SSH隧道是一种通过SSH协议在两个网络节点之间建立安全通信的技术。它可以用于多种用途,包括加密和保护敏感数据传输、绕过防火墙限制、远程访问内部服务等。 应用: 端口转发:SSH隧道可以将本地端口转发到远程主机上…...
支付功能的实现
1.商户调用第三方支付服务的主要步骤流程? 1.1 表单跳转 前端点击提交支付,请求后端支付接口 支付接口通过阿里api生成表单信息返回给前端页面 同步回调,异步回调参数 请求参数:总金额,外部订单号 公共参数࿱…...
SpringMVC JSON数据处理见解6
6.JSON数据处理 6.1.添加json依赖 springmvc 默认使用jackson作为json类库,不需要修改applicationContext-servlet.xml任何配置,只需引入以下类库springmvc就可以处理json数据: <!--spring-json依赖--> <dependency><groupId>com.f…...
python 读写kafka
1. 安装pykafka pip install pykafka2. 生产者 from pykafka import KafkaClientdef get_kafka_producer(hosts, topics):client KafkaClient(hostshosts)print(client.topics)topic client.topics[topics]producer topic.get_producer()return producer 测试 hosts 19…...
VBA: 如何用VBA遍历文件夹(含子文件夹)里的所有文件
目录 0 原始文件 1 step1:遍历文件夹(不包含子文件)内的文件数 2 step2: 遍历文件夹内的所有子文件夹的名字 3 step3 遍历文件夹的(含子文件)内的所有文件 4 step4 遍历文件夹的(含子文件)内的所有文…...
又快又好! 基于Consistency Model的一步采样歌声转换模型CoMoSVC已开源
在2023年,AI虚拟歌手如AI孙燕姿等已经引起了广泛的关注,而大多数应用都是基于开源框架SoVITS。最近,香港科技大学和微软亚洲研究院推出了一种基于Consistency Model的歌声转换系统CoMoSVC,它在歌声转换速度上与基于Flow的SoVITS系…...
服务器——配置免密登录
一、生成本机的密钥文件 打开本机的终端,输入 ssh-keygen,默认一路点enter。 将生成的 id_rsa.pub 公钥文件,复制一份改一个名称,比如改名成 id_rsa_test.pub。 二、将生成的公钥文件发送到服务器对应账户的.ssh文件夹下 将改…...
GoZero微服务个人探索之路(三)Go-Zero官方rpc demo示例探究
官方网址:https://go-zero.dev/docs/tasks/cli/grpc-demo 项目结构 demo包 两个文件均为protoc-gen-go-grpc自动生成构成一个完整的 gRPC 服务的定义和实现 democlient包 demo.go goctl生成的客户端代码 Request 和 Response 别名: 定义了 Request 和…...
1月下半笔记(个人向)
最近才开始看d2l(这种东西早该在两年前看的,拖到现在了) 为了做项目还得学一手OpenGL(被windows安装GLFW逼疯了) 1.15 打完ICPC EC final回来,也许可以出一篇博客写下简单的题解。 对蛋白质相似空间子结…...
ChatGpt使用技巧
通用类技巧 角色扮演 比如让ChatGpt扮演500强营销专家 告诉ChatGpt你的身份。初学者、或是有一定能力、知识的学习者等 限制ChatGpt回答长度 100~200字之间 让ChatGpt一步一步思考 他会预测下一个单词,根据prompt进行生成 明确你的要求和目的 说清楚问题&#x…...
自动安装解压版mysql8的脚本
由于mysql 8的 MSI 安装包,自动把程序安装到了C盘,且没看到有可以更改安装位置的配置可以修改。 故自行写了一个脚本,用来安装mysql 8的压缩包。可以将 mysql 8 以及其 Data目录 安装到C盘以外的位置。第一次写 bat 脚本,希望各位…...
第二讲_HarmonyOS应用创建和运行
HarmonyOS应用创建和运行 1. 创建一个HarmonyOS应用2. 运行新项目2.1 创建本地模拟器2.2 启动本地模拟器2.3 在本地模拟器运行项目 1. 创建一个HarmonyOS应用 打开DevEco Studio,在欢迎页单击Create Project,创建一个新工程。 选择创建Application应用。…...
Android车载系统Car模块架构链路分析
一、模块主要成员 CarServiceHelperService SystemServer 中专门为 AAOS 设立的系统服务,用来管理车机的核心服务 CarService。该系统服务的具体实现在 CarServiceHelperServiceUpdatableImpl CarService Car模块核心服务APP,Android 13版本开始分为…...
C语言经典算法之顺序查找算法
目录 前言 A.建议 B.简介 一 代码实现 二 算法时空复杂度 A.时间复杂度: B.空间复杂度: 三 优点和缺点 A.优点: B.缺点: 四 现实中的应用 前言 A.建议 1.学习算法最重要的是理解算法的每一步,而不是记住算…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
