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");
}
}