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

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

目录 准备工作代码运行 说明&#xff1a;本文通过 FastAPI 实现返回两个参数 ab 的值&#xff1b; 准备工作 默认读者已准备完善 Python IDE工具以及包管理工具。 首先&#xff0c;需要安装 fastapi 和 uvicorn 库&#xff0c;如果没有请使用 pip 进行安装&#xff1a; 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分词统计工具&#xff1a;如何轻松打包Python脚本为EXE 写在最前面需求分析直接用Python打包为什么大&#xff1f;为什么要使用conda环境&#xff1f; 将Python脚本打包为一个独立的应用程序1. 编写Python脚本&#xff1a;初步功能实现2. 初步图形用户界面&#xff…...

Windows系统字体尺寸学习

调用GetTextMetrics来获得字体尺寸信息, 函数返回设备描述表中当前选定的字体信息&#xff1b; 返回值到TEXTMETRIC类型的结构中&#xff1b; 返回字段值的单位取决于当前设备描述表映射方式&#xff1b;默认映射方式是MM_TEXT&#xff0c;值的单位是像素&#xff1b; 前7个字…...

SSH隧道技术

SSH隧道 简介 SSH隧道是一种通过SSH协议在两个网络节点之间建立安全通信的技术。它可以用于多种用途&#xff0c;包括加密和保护敏感数据传输、绕过防火墙限制、远程访问内部服务等。 应用&#xff1a; 端口转发&#xff1a;SSH隧道可以将本地端口转发到远程主机上&#xf…...

支付功能的实现

1.商户调用第三方支付服务的主要步骤流程&#xff1f; 1.1 表单跳转 前端点击提交支付&#xff0c;请求后端支付接口 支付接口通过阿里api生成表单信息返回给前端页面 同步回调&#xff0c;异步回调参数 请求参数&#xff1a;总金额&#xff0c;外部订单号 公共参数&#xff1…...

SpringMVC JSON数据处理见解6

6.JSON数据处理 6.1.添加json依赖 springmvc 默认使用jackson作为json类库,不需要修改applicationContext-servlet.xml任何配置&#xff0c;只需引入以下类库springmvc就可以处理json数据&#xff1a; <!--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:遍历文件夹&#xff08;不包含子文件&#xff09;内的文件数 2 step2: 遍历文件夹内的所有子文件夹的名字 3 step3 遍历文件夹的&#xff08;含子文件&#xff09;内的所有文件 4 step4 遍历文件夹的&#xff08;含子文件&#xff09;内的所有文…...

又快又好! 基于Consistency Model的一步采样歌声转换模型CoMoSVC已开源

在2023年&#xff0c;AI虚拟歌手如AI孙燕姿等已经引起了广泛的关注&#xff0c;而大多数应用都是基于开源框架SoVITS。最近&#xff0c;香港科技大学和微软亚洲研究院推出了一种基于Consistency Model的歌声转换系统CoMoSVC&#xff0c;它在歌声转换速度上与基于Flow的SoVITS系…...

服务器——配置免密登录

一、生成本机的密钥文件 打开本机的终端&#xff0c;输入 ssh-keygen&#xff0c;默认一路点enter。 将生成的 id_rsa.pub 公钥文件&#xff0c;复制一份改一个名称&#xff0c;比如改名成 id_rsa_test.pub。 二、将生成的公钥文件发送到服务器对应账户的.ssh文件夹下 将改…...

GoZero微服务个人探索之路(三)Go-Zero官方rpc demo示例探究

官方网址&#xff1a;https://go-zero.dev/docs/tasks/cli/grpc-demo 项目结构 demo包 两个文件均为protoc-gen-go-grpc自动生成构成一个完整的 gRPC 服务的定义和实现 democlient包 demo.go goctl生成的客户端代码 Request 和 Response 别名&#xff1a; 定义了 Request 和…...

1月下半笔记(个人向)

最近才开始看d2l&#xff08;这种东西早该在两年前看的&#xff0c;拖到现在了&#xff09; 为了做项目还得学一手OpenGL&#xff08;被windows安装GLFW逼疯了&#xff09; 1.15 打完ICPC EC final回来&#xff0c;也许可以出一篇博客写下简单的题解。 对蛋白质相似空间子结…...

ChatGpt使用技巧

通用类技巧 角色扮演 比如让ChatGpt扮演500强营销专家 告诉ChatGpt你的身份。初学者、或是有一定能力、知识的学习者等 限制ChatGpt回答长度 100~200字之间 让ChatGpt一步一步思考 他会预测下一个单词&#xff0c;根据prompt进行生成 明确你的要求和目的 说清楚问题&#x…...

自动安装解压版mysql8的脚本

由于mysql 8的 MSI 安装包&#xff0c;自动把程序安装到了C盘&#xff0c;且没看到有可以更改安装位置的配置可以修改。 故自行写了一个脚本&#xff0c;用来安装mysql 8的压缩包。可以将 mysql 8 以及其 Data目录 安装到C盘以外的位置。第一次写 bat 脚本&#xff0c;希望各位…...

第二讲_HarmonyOS应用创建和运行

HarmonyOS应用创建和运行 1. 创建一个HarmonyOS应用2. 运行新项目2.1 创建本地模拟器2.2 启动本地模拟器2.3 在本地模拟器运行项目 1. 创建一个HarmonyOS应用 打开DevEco Studio&#xff0c;在欢迎页单击Create Project&#xff0c;创建一个新工程。 选择创建Application应用。…...

Android车载系统Car模块架构链路分析

一、模块主要成员 CarServiceHelperService SystemServer 中专门为 AAOS 设立的系统服务&#xff0c;用来管理车机的核心服务 CarService。该系统服务的具体实现在 CarServiceHelperServiceUpdatableImpl CarService Car模块核心服务APP&#xff0c;Android 13版本开始分为…...

C语言经典算法之顺序查找算法

目录 前言 A.建议 B.简介 一 代码实现 二 算法时空复杂度 A.时间复杂度&#xff1a; B.空间复杂度&#xff1a; 三 优点和缺点 A.优点&#xff1a; B.缺点&#xff1a; 四 现实中的应用 前言 A.建议 1.学习算法最重要的是理解算法的每一步&#xff0c;而不是记住算…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...