SSM续(全局异常处理与跨域CORS)附带测试文件

SSM续(全局异常处理与跨域CORS)

**前言:**本教程是接上一个教程的延续,补齐了全局异常处理与跨域CORS,开发更加的方便

如果对SSM项目还不太熟悉的同学,可以看我上一篇文章《2025最新SSM整合教程从0 ~ 1 就算cv也可成功运行》

地址:https://blog.csdn.net/hgz3315867391/article/details/148906698?spm=1011.2415.3001.5331

最终项目结构

CORS与全局异常项目结构

一、自定义全局异常类

这个类需要继承 RuntimeException

@Getter
public class GlobalException extends RuntimeException {
    /**
     * 异常错误码
     */
    private final Integer errorCode;

    public GlobalException(int errorCode, String message) {
        super(message);
        this.errorCode = errorCode;
    }
}

定义用户异常类,这个类是继承GlobalException类的,用来处理用户的异常

/**
 * 用户信息异常类
 */
public class UserInfoException extends GlobalException {
    public UserInfoException(int errorCode, String message) {
        super(errorCode, message);
    }
}

二、新建异常处理器

真正来说是可以直接复制的,如果你们也出现了日志无法使用的异常,就粘贴个jar包

注意!!如果是上次打的工件一定要重新把新的依赖添加进去

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.17</version>
</dependency>

异常处理器

import com.hgz.ssmdemo.common.ResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice("com.hgz.ssmdemo.web.controller")
@Slf4j
public class GlobalExceptionAdvice {

    @ExceptionHandler(GlobalException.class)
    public ResultVO handleGlobalException(GlobalException e) {
        log.error(e.getMessage(), e);
        ResultVO vo = new ResultVO();
        vo.setCode(e.getErrorCode());
        vo.setMessage(e.getMessage());
        return vo;
    }

    @ExceptionHandler(Exception.class)
    public ResultVO handleGlobalException(Exception e) {
        log.error(e.getMessage(), e);
        ResultVO vo = new ResultVO();
        vo.setCode(500);
        vo.setMessage("服务器繁忙,请稍后尝试");
        return vo;
    }
}

三、修改UserServiceImpl中的异常为我们自定义的异常

修改一下UserServiceImpl的异常就可以了,很简单

import com.hgz.ssmdemo.common.exceptions.user.UserInfoException;
import com.hgz.ssmdemo.entity.User;
import com.hgz.ssmdemo.mapper.UserMapper;
import com.hgz.ssmdemo.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {

    /**
     * 用户mapper
     */
    private final UserMapper userMapper;

    @Override
    public void saveUser(User user) {
        try {
            userMapper.saveUser(user);
        } catch (Exception e) {
            throw new UserInfoException(1001,"添加用户失败,请稍后重试");
        }
    }

    @Override
    public void delete(Integer userId) {
        try {
            userMapper.deleteUser(userId);
        } catch (Exception e) {
            throw new UserInfoException(1002,"删除用户失败,请稍后重试");
        }
    }

    @Override
    public void updateUser(User user) {
        try {
            userMapper.updateUser(user);
        } catch (Exception e) {
            throw new UserInfoException(1003,"修改用户失败,请稍后重试");
        }
    }

    @Override
    public User getByUserid(Integer userId) {
        try {
            return userMapper.getUserById(userId);
        } catch (Exception e) {
            throw new UserInfoException(1004,"获取用户信息失败,请稍后重试");
        }
    }

    @Override
    public List<User> listUser() {
        try {
            return userMapper.listUser();
        } catch (Exception e) {
            throw new UserInfoException(1005,"获取所有用户信息失败,请稍后重试");
        }
    }
}

四、设置跨域请求

设置跨域请求只需要再MvcConfig.java中重写一个方法就可以了

@Configuration
// 开启 Spring MVC 的核心配置功能
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        // 将无法处理的请求交给默认的servlet处理器来处理
        configurer.enable();
    }
	
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("*")
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}

五、测试原生html

我已经放在我的git仓库中了

地址:https://gitee.com/addmdxwg/ssm-configuration-tutorial

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值