SpringMVC(全局异常处理.动态接收Ajax请求)

news2024/11/26 12:25:18

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")
    //@ResponseBody
    public 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")
    //@ResponseBody
    public 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.coloradmin.cn/o/1393386.html

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

相关文章

添加边界值分析测试用例

1.1创建项目成功后会自动生成封装好的函数&#xff0c;在这些封装好的函数上点击右键&#xff0c;添加边界值分析测试用例&#xff0c;如下图所示。 1.2生成的用例模版是不可以直接运行的&#xff0c;需要我们分别点击它们&#xff0c;让它们自动生成相应测试用例。如下图所示&…

华为路由器配置访问控制列表ACL用例

配置要求 如组网图所示&#xff0c;R3为服务器&#xff0c;R1为客户端&#xff0c;客户端与服务器 之间路由可达。其中R1和R2间互联物理接口地址分别为 10.1.2.1/24和10.1.2.2/24&#xff0c;R2和R3间互联物理接口地址分别 为10.1.3.2/24和10.1.3.1/24。另外&#xff0c;R1上创…

企业计算机服务器中了mkp勒索病毒如何处理,mkp勒索病毒解密

网络技术的不断发展&#xff0c;为企业的生产运营提供了非常有利条件&#xff0c;但也为企业的数据安全埋下隐患&#xff0c;近期&#xff0c;众多企业的服务器遭到了mkp勒索病毒攻击&#xff0c;导致企业计算机服务器瘫痪无法正常工作&#xff0c;严重影响了企业正常生活运营。…

统计学-R语言-5.3

文章目录 前言分位数统计量的标准误总结 前言 本篇文章即为概率与分布的最后一篇文章。 分位数 分位数函数是累积分布函数的反函数。 p-分位数是具有这样性质的一个值&#xff1a;小于或等于它的概率为p。 根据定义&#xff0c;中位数即50%分位数。 分位数通常用于置信区间的…

系统架构的演变:从单体到微服务的旅程

文章目录 前言一、单体架构简图 二、垂直架构简图 三、水平架构简图 四、面向服务架构&#xff08;SOA&#xff09;简图 五、微服务架构简图 总结 前言 随着信息技术的快速发展&#xff0c;系统架构也在不断演变。从早期的单体架构到现代的微服务架构&#xff0c;每一次的变革都…

Leetcode454四数相加Ⅱ(java实现)

今天&#xff0c;我们分享的题目是Leetcode454四数相加Ⅱ&#xff0c;我们先来看题目&#xff1a; 首先可以从题意中大体得知&#xff0c;也是从某个集合中找有没有符合条件的元素。遇见这种类型的题目我们可以考虑用哈希表&#xff0c;本题我们选取的是map集合&#xff0c;因…

Damicms漏洞挖掘

今天又是挖漏洞的一天&#xff0c;&#xff08;寒假了也不能停下挖洞的步伐&#xff09; “《学而不思则罔&#xff0c;不学不思则爽》” ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 1.存储型XSS XSS…

Spring MVC学习之——自定义日期转化器

日期转换器 在数据库中的日期数据是date类型&#xff0c;而如何我们想在页面自己添加数据&#xff0c;一般是使用年-月-日的形式&#xff0c;这种形式不仅date类型接收不到&#xff0c;而且传来的是String类型&#xff0c;此时&#xff0c;我们就可以自定义日期转换器来接收数…

React 基于Ant Degisn 实现table表格列表拖拽排序

效果图&#xff1a; 代码&#xff1a; myRow.js import { MenuOutlined } from ant-design/icons; import { DndContext } from dnd-kit/core; import { restrictToVerticalAxis } from dnd-kit/modifiers; import {arrayMove,SortableContext,useSortable,verticalListSorti…

C——语言内存函数

目录 一、memcpy的使用和模拟实现 1.memcpy函数原型 2.memcpy函数的使用 3.memcpy函数的模拟实现 二、memmove的使用和模拟实现 1.memmove函数原型 2.memmove函数的使用 3.memmove函数的模拟实现 三、memset的使用 1.memset函数原型 2.memset函数的使用 四、memcmp…

【话题】ChatGPT 和文心一言哪个更好用

星火说 ChatGPT 智能回复&#xff1a;ChatGPT能够根据上下文理解用户的问题&#xff0c;并给出相应的回答。它使用深度学习算法来理解和生成文本&#xff0c;因此可以处理各种复杂的问题和话题。语言准确性&#xff1a;ChatGPT的语言模型经过了大量的训练数据&#xff0c;因此…

vue项目本地开发完成后部署到服务器后报404是什么原因

文章目录 一、如何部署二、404问题为什么history模式下有问题为什么hash模式下没有问题解决方案 参考文献 一、如何部署 前后端分离开发模式下&#xff0c;前后端是独立布署的&#xff0c;前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道vu…

macOS系统下载安装IDEA 操作流程

目录 第一步 进入官网&#xff0c;选择箭头指向的版本 第二步 下载完成后打开&#xff0c;拖动安装包安装​编辑 第三步 点击" project"&#xff0c;在JDK下拉框选择"Download JDK" 第四步 下载完成以后&#xff0c;点击右下角的Create按钮。 第一步 进…

【Docker】在Windows操作系统安装Docker前配置环境

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

PMP考试中常见的组织/人员/职位/角色的含义,以及典型真题分析3

华研荟继续为您分享在PMP考试中经常出现的一些组织、人员、职位和角色的含义&#xff0c;并且通过近年真题分析来给大家体会考试中如何理解&#xff0c;如何解答。 这篇文章来看客户和供应商/分包商&#xff0c;也是PMP考试中经常出现的两类人&#xff08;角色&#xff09;。 …

常见的设计模式(模板与方法,观察者模式,策略模式)

前言 随着时间的推移&#xff0c;软件代码越来越庞大&#xff0c;随着而来的就是如何维护日趋庞大的软件系统。在面向对象开发出现之前&#xff0c;使用的是面向过程开发来设计大型的软件程序&#xff0c;面向过程开发将软件分成一个个单独的模块&#xff0c;模块之间使用函数…

C语言通过MSXML6.0读写XML文件(同时支持char[]和wchar_t[]字符数组)

开发环境&#xff1a;Visual Studio 2010 运行环境&#xff1a;Windows XP SP3 第一节 读取XML文件&#xff08;使用wchar_t[]字符数组&#xff09; /* 这个程序只能在C编译器下编译成功, 请确保源文件的扩展名为c */ #define COBJMACROS #include <stdio.h> #include …

web蓝桥杯真题--8、和手机相处的时光

介绍 现在都提倡健康使用手机&#xff0c;那么统计一下在一周中每天使用手机的情况吧&#xff01;本题使用 ECharts 实现统计手机使用时长的折线图&#xff0c;但是代码中存在 Bug 需要你去修复。 准备 开始答题前&#xff0c;需要先打开本题的项目代码文件夹&#xff0c;目…

深度学习记录--梯度检验

数值逼近 为了对梯度进行检验&#xff0c;需要计算近似误差值来接近梯度 对于单边误差和双边误差公式&#xff0c;其中双边误差与真实梯度相差更小&#xff0c;故一般采用双边误差公式 双边误差 公式&#xff1a; 梯度检验(gradient checking) 对于成本函数&#xff0c;求出…

Python 邮件发送

首先需要有一个邮箱&#xff0c;没有就注册一个&#xff0c;最好是163邮箱。 本文将使用163邮箱讲解python发送邮件。 目录 开启邮箱smtp服务 打开SMTP设置 开启SMTP服务 记录授权密码和服务端配置 脚本发送邮件 引入所需的库 发送配置 邮箱登录发送邮件 查看收到邮件…