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);}
}

          

            

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

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

相关文章

配置redis挂载

1. 暂停和删除redis 2.创建文件夹 /usr/local/software/redis/6379/conf/ /usr/local/software/redis/6379/data/ 把redis-conf文件上传到conf文件夹中 3.配置网络 docker network create --driver bridge --subnet172.18.12.0/16 --gateway172.18.1.1 wn_docker_net 4.运…

快速入门Java NIO(Not I/O)的网络通信框架--Netty

Netty 入门 了解netty前需要对nio有一定认识,该笔记基础来自bilinbili黑马,在此基础上自己学习的笔记,添加了一些自己的理解 了解java 非阻塞io编程 1. 概述 1.1 Netty 是什么&#xff1f; Netty is an asynchronous event-driven network application framework for rapid …

MATLAB - 机翼摇摆过程中飞机的模型参考自适应控制

系列文章目录 前言 本例说明如何控制三角翼飞机在机翼摇晃时的横滚和横滚速率。在本例中&#xff0c;系统模型是未知的。因此&#xff0c;需要使用模型参考自适应控制 (MRAC) 使控制系统与理想参考模型相匹配。飞机在 Simulink 中建模&#xff0c;MRAC 控制器使用 Simulink Co…

被遗忘在角落的RPA,成了提升AI Agent执行能力的天选神器

LLM&#xff08;Large Language Models&#xff09;刚爆发之时&#xff0c;很多人认为RPA要完了&#xff0c;自然语言交互API操作足以干掉任何UI自动化工具。 然而&#xff0c;大语言模型应用发展到AI Agent这一步&#xff0c;大家才发现API并不是万能的。Agent平台雨后春笋一…

Unity向量叉乘

叉乘计算公式 Unity中叉乘计算 Vector3.Cross(A.position, B.position); 几何意义 假设向量A和B 都在XZ平面上 向量A叉乘向量B y大于0 证明 B在A右侧 y小于0 证明 B在A左侧 示例 Vector3 C Vector3.Cross(A.position, B.position); if(C.y > 0) {print("B在A右侧&qu…

阿里云国外服务器价格表

阿里云国外服务器优惠活动「全球云服务器精选特惠」&#xff0c;国外服务器租用价格24元一个月起&#xff0c;免备案适合搭建网站&#xff0c;部署独立站等业务场景&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动&#xff1a; 全球云服务器精选特惠…

图解第五代英特尔至强可扩展处理器

四年五节点&#xff0c;一年出两代。在年初推出代号Sapphire Rapids&#xff08;蓝宝石激流&#xff0c;SPR&#xff09;的第四代英特尔至强可扩展处理器之后&#xff0c;仅隔11个月&#xff0c;代号Emerald Rapids&#xff08;绿宝石激流&#xff0c;EMR&#xff09;的第五代英…

【计算机硬件】2、指令系统、存储系统和缓存

文章目录 指令系统计算机指令的组成计算机指令执行过程指令的寻址方式&#xff08;怎么样找到操作数&#xff1f;&#xff09;1、顺序寻址2、跳跃寻址 指令操作数的寻址方式&#xff08;怎么样找到操作数&#xff1f;&#xff09;1、立即寻址方式2、直接寻址方式3、间接寻址方式…

mac PyCharm 上传文件到远程服务器+远程服务器下载到本地

1 部署配置 选择SFTP name&#xff1a;test6 输入ssh账号和密码。保存密码和30s心跳。 2 目录映射 Local path&#xff08;本地mac机器&#xff09;&#xff1a;/Users/clevercode/PycharmProjects/test6 Root path&#xff08;远程服务机器&#xff09;&#xff1a;/home/…

从前端角度浅谈性能 | 京东物流技术团队(转载)

1 前言 自网站诞生以来&#xff0c;页面白屏时间、用户交互的响应速度等一直都是开发者关心的问题&#xff0c;这直接影响了一个网站能否为用户的浏览提供舒适的服务&#xff0c;而这种舒适度&#xff0c;直接关系着对用户的吸引力&#xff0c;毕竟谁都不能忍受一个页面长达10秒…

坚持刷题 | 二叉树的层序遍历

坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天刷&#xff1a;二叉树的层序遍历 题目 102二叉树的层序遍历 考察点 数据结构基础&#xff1a; 能够正确地使用二叉树数据结构&#xff0c;并了解二叉树的基本性质。编程基础&#xff1a; 能够熟练使用Java编程语言&a…

数据结构--排序

参考【算法】排序算法之希尔排序 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/122632213 1. 排序的定义 2. 插入排序 2.1 直接插入排序 在插入第i&#xff08;i>1)个记录时&#xff0c;前面的i-1个记录已经排好序 void insertSort(int r[],int n) {for(int i2;i<…