不管是否出异常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
写回答
3回答
-
你的问题,我理解下来是:无论什么请求,都会调用HttpInterceptor里的preHandle吧(你的日志截图里我看到这个方法被调用了),如果是,那么你看看是否是HttpInterceptor的preHandle里return false了022018-06-11
-
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"); } }
00 -
Jimin
2018-06-10
你好,麻烦贴一下这个类的代码和相关的配置
012018-06-10
相似问题