不管是否出异常resolveException方法都会被调用,ret返回false,data都为null

来源:6-3 接口请求全局异常处理-设计与验证

qq_HKT_0

2018-06-10

六月 10, 2018 3:51:45 下午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping register

信息: Mapped "{[/test/validate.json]}" onto public com.mmall.common.JsonData com.mmall.controller.TestController.validate(com.mmall.param.TestVo) throws com.mmall.exception.ParamException

//img.mukewang.com/szimg/5b1cdbeb0001717213210544.jpg

写回答

3回答

Jimin

2018-06-11

你的问题,我理解下来是:无论什么请求,都会调用HttpInterceptor里的preHandle吧(你的日志截图里我看到这个方法被调用了),如果是,那么你看看是否是HttpInterceptor的preHandle里return false了
0
2
Jimin
回复
qq_HKT_0
哦,那应该是没安装lombok插件,具体可以参考 问题汇总手记:http://www.imooc.com/article/21449
2018-06-11
共2条回复

qq_HKT_0

提问者

2018-06-10

package com.mmall.common;


import com.mmall.exception.ParamException;
import com.mmall.exception.PermissionException;

import ch.qos.logback.classic.Logger;
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 {

	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 || ex instanceof ParamException) {
	                JsonData result = JsonData.fail(ex.getMessage());
	                System.out.println("SpringExceptionResolver:url.endsWith(.json)+1");
	                mv = new ModelAndView("jsonView", result.toMap());
	            } else {
	            //  log.error("unknown json exception, url:" + url, ex);
	                JsonData result = JsonData.fail(defaultMsg);
	                System.out.println("SpringExceptionResolver:url.endsWith(.json)+2");
	                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);
	            System.out.println("SpringExceptionResolver:url.endsWith(.page)+3");
	            mv = new ModelAndView("exception", result.toMap());
	        } else {
	           // log.error("unknow exception, url:" + url, ex);
	            JsonData result = JsonData.fail(defaultMsg);
	            System.out.println("SpringExceptionResolver:url.endsWith(.page)+4");
	            mv = new ModelAndView("jsonView", result.toMap());
	        }

	        return mv;
	}
	


}
package com.mmall.exception;

public class ParamException extends RuntimeException {
    public ParamException() {
        super();
    }

    public ParamException(String message) {
        super(message);
    }

    public ParamException(String message, Throwable cause) {
        super(message, cause);
    }

    public ParamException(Throwable cause) {
        super(cause);
    }

    protected ParamException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
	<context:annotation-config />

	<!-- 启动注解驱动的spring mvc 功能 -->
	<mvc:annotation-driven />



	<!-- 启动包扫描功能 -->
	<context:component-scan base-package="com.mmall.controller" />
	<context:component-scan base-package="com.mmall.service" />
	
	<mvc:interceptors>
		<bean class="com.mmall.common.HttpInterceptor"/>
	</mvc:interceptors>
	
	<bean class="com.mmall.common.ApplicationContextHelper" lazy-init="false"/>
	
    <bean class="com.mmall.common.SpringExceptionResolver"/>
	
	<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />

	<bean id="jsonView"
		class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />

	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>

</beans>
package com.mmall.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.mmall.common.ApplicationContextHelper;
import com.mmall.common.JsonData;
import com.mmall.dao.SysAclModuleMapper;
import com.mmall.exception.ParamException;
import com.mmall.model.SysAclModule;
import com.mmall.param.TestVo;
import com.mmall.util.BeanValidator;

import ch.qos.logback.classic.Logger;
import lombok.extern.slf4j.Slf4j;

@Controller
@RequestMapping("/test")
@Slf4j
public class TestController {
	
	@ResponseBody
	@RequestMapping("Test.json")
	public JsonData hello() {
		// log.info("hello");
		System.out.println("Controller");
		return JsonData.success("hello permission");
	}

    @RequestMapping("/validate.json")
    @ResponseBody
    public JsonData validate(TestVo vo) throws ParamException {
    	System.out.println(vo.toString());
        //log.info("validate");
    	System.out.println("validata方法被加载了");
        SysAclModuleMapper moduleMapper = ApplicationContextHelper.popBean(SysAclModuleMapper.class);
        SysAclModule module = moduleMapper.selectByPrimaryKey(1);
       // log.info(JsonMapper.obj2String(module));
        BeanValidator.check(vo);
        return JsonData.success("test validate");
    }
  
}


0
0

Jimin

2018-06-10

你好,麻烦贴一下这个类的代码和相关的配置

0
1
qq_HKT_0
我是按照视频去写,基本没改动。。。
2018-06-10
共1条回复

Java开发企业级权限管理系统

源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术

2227 学习 · 1334 问题

查看课程