请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

6-3课 老师 为什么我抛出的异常不会通过方法来返回?不拦截

老师,我哪里写漏了吗?,我正常的return可以返回,抛出异常就不行了,不拦截

https://img1.sycdn.imooc.com/szimg/5ecdd666098c8ca119201055.jpg

在spring-servlet.xml里我也注入了 头部引入也没问题 

https://img1.sycdn.imooc.com//szimg/5ecdd71e09a4f96810310794.jpg

TestController.java
package com.mmall.controller;

import com.mmall.common.JsonData;
import com.mmall.exception.PermissionException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/test")
@Slf4j
public class TestController {

    @RequestMapping("/hello.json")
    @ResponseBody
    public JsonData hello(){
        log.info("Good!");
        throw new RuntimeException("test exception");
        //return JsonData.success("Good Morning!");
    }
}

如果我把抛出异常注释掉,正常return 

https://img1.sycdn.imooc.com/szimg/5ecdddaa09b3c4c006810118.jpg


正在回答

2回答

你好,看一下那个exceptionReslover的实现

0 回复 有任何疑惑可以回复我~
  • 提问者 黃金葉 #1
    贴上来了 老师请看一下
    回复 有任何疑惑可以回复我~ 2020-05-28 13:38:38
  • Jimin 回复 提问者 黃金葉 #2
    这个代码看着也没啥问题,那么应该是配置文件哪里不对了,你仔细对一下web.xml、spring-servlet.xml、applicationContext.xml三个文件是否有不一样的地方,包含顺序。如果对完还是没查到问题,把这些都发出来我看看
    回复 有任何疑惑可以回复我~ 2020-05-28 22:35:47
  • 提问者 黃金葉 回复 Jimin #3
    OK 解决了 谢谢老师,仔细对比了一下,是web.xml里的<web-app >标签少了一些引用
    回复 有任何疑惑可以回复我~ 2020-06-01 11:37:32
提问者 黃金葉 2020-05-28 13:38:22
package com.mmall.common;

import com.mmall.exception.PermissionException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Slf4j
public class SpringExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        String url = request.getRequestURL().toString();
        ModelAndView mv;
        String defaultMsg = "System error";

        // 这里我们要求项目中所有请求json数据,都使用.json结尾
        if (url.endsWith(".json")) {
            if (ex instanceof PermissionException) {
                JsonData result = JsonData.fail(ex.getMessage());
                mv = new ModelAndView("jsonView", result.toMap());
            } else {
                log.error("unknown json exception, url:" + url, ex);
                JsonData result = JsonData.fail(defaultMsg);
                mv = new ModelAndView("jsonView", result.toMap());
            }
        } else if (url.endsWith(".page")){ // 这里我们要求项目中所有请求page页面,都使用.page结尾
            log.error("unknown page exception, url:" + url, ex);
            JsonData result = JsonData.fail(defaultMsg);
            mv = new ModelAndView("exception", result.toMap());
        } else {
            log.error("unknow exception, url:" + url, ex);
            JsonData result = JsonData.fail(defaultMsg);
            mv = new ModelAndView("jsonView", result.toMap());
        }

        return mv;
    }
}


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号