• 解决拦截器抛出异常处理类的500状态码Html默认格式响应 !


    解决方式

    1. <mvc:annotation-driven>
    2. <mvc:message-converters>
    3. <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    4. <property name="supportedMediaTypes">
    5. <list>
    6. <value>application/json;charset=UTF-8value>
    7. list>
    8. property>
    9. bean>
    10. mvc:message-converters>
    11. mvc:annotation-driven>

    Java对象转换为JSON格式的响应,使用spring-mvc.xml配置适当的消息转换器。

    问题出处的相关类如下

    interceptor如下

    1. package com.ekgc.interceptor;
    2. import com.ekgc.exception.UnLoginException;
    3. import com.ekgc.pojo.SysUser;
    4. import org.springframework.web.servlet.HandlerInterceptor;
    5. import org.springframework.web.servlet.ModelAndView;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import javax.servlet.http.HttpSession;
    9. /**
    10. * 登录拦截器
    11. * 1.实现 HandlerInterceptor接口
    12. * 2.实现接口方法
    13. * 3.在springmvc.xml中配置拦截器
    14. * @author Magic
    15. * @version 1.0
    16. */
    17. public class LoginInterceptor implements HandlerInterceptor {
    18. @Override
    19. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    20. System.out.println("preHandle...");
    21. // 记录请求处理开始时间
    22. request.setAttribute("startTime", System.currentTimeMillis());
    23. // 检查用户是否已经登录
    24. if (!isLoggedIn(request)) {
    25. //抛出未登录异常
    26. throw new UnLoginException("您还没有登录!!!");
    27. }
    28. return true;
    29. }
    30. @Override
    31. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    32. System.out.println("postHandle...");
    33. // 计算请求处理时间
    34. long startTime = (long) request.getAttribute("startTime");
    35. long endTime = System.currentTimeMillis();
    36. long executionTime = endTime - startTime;
    37. System.out.println("Request execution time: " + executionTime + " ms");
    38. }
    39. @Override
    40. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    41. System.out.println("afterCompletion...");
    42. }
    43. private boolean isLoggedIn(HttpServletRequest request) {
    44. // 检查用户是否已登录的逻辑
    45. HttpSession session = request.getSession();
    46. SysUser user = (SysUser) session.getAttribute("user");
    47. // 返回true表示已登录,false表示未登录
    48. if (user == null) {
    49. return false;
    50. }
    51. return true;
    52. }
    53. }

     自定义异常类

    1. package com.ekgc.exception;
    2. /**
    3. * @author Magic
    4. * @version 1.0
    5. */
    6. public class UnLoginException extends RuntimeException{
    7. public UnLoginException(String message) {
    8. super(message);
    9. }
    10. }

     异常处理类

    1. package com.ekgc.exception;
    2. import com.ekgc.response.RespBody;
    3. import org.springframework.web.bind.annotation.ControllerAdvice;
    4. import org.springframework.web.bind.annotation.ExceptionHandler;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. /**
    7. * 登录异常处理类
    8. * @author Magic
    9. * @version 1.0
    10. */
    11. @ControllerAdvice
    12. public class LoginExceptionHandler {
    13. @ExceptionHandler(UnLoginException.class)
    14. @ResponseBody
    15. public RespBody loginExceptionHandler(UnLoginException e) {
    16. String message = e.getMessage();
    17. System.out.println(message);
    18. return new RespBody(-1,message,message);
    19. }
    20. }

  • 相关阅读:
    最新国内maven仓库镜像地址
    风电光伏混合储能功率小波包分解、平抑前后波动性分析、容量配置、频谱分析、并网功率波动分析(Matlab代码实现)
    是什么引起数据库响应超时?
    点云入门知识
    腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)
    .NET 6当中的Web API版本控制
    这些ChatGPT旗下的AI工具你都认识吗?
    关于#搜索引擎#的问题:虽然静下心学英语,更适合中国宝宝认知的学习英语,应试英语的方法,针对于听力、阅读、单词量(最头疼)、作文,有什么方向或经验能推荐、分享一下吗
    Vue项目中ESLint配置(VScode)
    Java 数组
  • 原文地址:https://blog.csdn.net/qq_58647634/article/details/132683890