首页 技术 正文
技术 2022年11月23日
0 收藏 570 点赞 4,528 浏览 114381 个字

我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类。在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代码,这样很麻烦啊,那怎么办?定义一个统一的异常处理器类。所有的异常都不用自己去捕获了,统一进行处理就好。

编写流程:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvwAAAI4CAIAAACZQ6p6AAAgAElEQVR4nO3dLZPcSKIu4IIDGxrOT2h0Y0PIP2EiDlk4SNhwmZsNtMCJWGg4cJgWNhx0w3CB4obhQMOBdUF9paTUV1V3ZaX0PMTurpIqpUplvp1KSbs9AMAG7FIXAADgHoQeAGAThB4AYBOEHgBgE4QeAGAThB4AYBOEHgBgE4QeAGAThB4AYBOEHgBgE4QeAGAThB4AYBOEHgBgE4QeAGAThB4AYBOEHgBgE4QeAGAThB4AYBOEHgBgE4QeAGAThB4AYBOEHgBgE4QeAGAThB4AYBOEHgBgE4QeAGAThB4AYBMyCz3Pz887SOr5+Tn1cQDANTILPbtdZgVmfVRCgExl1nzrb0hOJQTIVGbNt/6G5FRCgExl1nzrb0hOJQTIVGbNt/6G5FRCgExl1nzrb0hOJQTIVGbNt/6G5FRCgExl1nzrb0hOJQTIVGbNt/6G5FRCgExl1nzrb0hOJQTIVGbNt/6G5FRCgExl1nzrb0hOJQTIVGbN9xX9TV0WRVXv9/v9vqnrJnypqY4vpNZUZdVcfih2xfHHhykhF0IPQKYya76vCj278hgcmqrYnX84vtb6eWwl5yAypqmKoiiGHs89soYg6TRVcXpjXe5mFpD7EXoAMpVZ833dSM8pawRx4vTazEjRWbJpBtJL7xOi5Rha9FCY0zpG1kVKQg9ApjJrvt889AxHlNbATDf0dIeMBt43UI7OEkMDQ+EYUVHMG2ri/Qk9AJnKrPle0N/00kRZd08chWeiOomiMwbUDz3xBDIeYco6Mq2omDPWNHtIivcn9ABkKrPm++qRnm4amTqRdH3oGR7pKev9vq7Cl8PxpLqMzgYqa9OZH4zQA5CpzJrvNzm9dQ40p2GWu4Se0+tDIzaRwRzjOw9J6AHIVGbN9/Whp66qpht6Tv/pR5G6nJxmE48jMxYcXvK60PPy8jJrR/BGhB6ATGXWfF8Ves5J4xgigqxzGJaZDhdzR3pucI5LRdVcTsYJPY9H6AHIVGbN99L+pqmCq55OUeV0wut84qt3YdVh/k17Pe23dCck9z81WMOsu/yEJ91O5aqGFgqDjtBzZ0IPQKYya74X9DenvHNJNKdYcTrhdXqhP27TSynxtwwOw4zPCIqWdFR76ZeXF6EnIaEHIFOZNd+3TGQ+z9w5/KYfhsJlOr+Jhp7gLe3cMnJT5thJq/FzZ50fX3qW7hBuJPQAZCqz5vuG0HOZrVyXRVVXRVmf59FMXLs1HXq6H9l+bWoKUPv02uT8IVknLaEHIFOZNd/Xh57gCq26LIrzD8dnfdZ13VrmltAzY+loEePvji4s9CQk9ABkKrPm++rQEzzH/PyQq9a7wjnDc647H7yyqi57A0fTc3qiKedcDDfreShCD0CmMmu+F/U3l5NX9SXyxCPIzKdBtFfeX2JgdnMkB7U+vP340nb5hq/gIhGhByBTmTXfi/ubpqrqJow8+8GrpW65885xlQPBaSL09Nfl0aKPTOgByFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8629ITiUEyFRmzbf+huRUQoBMZdZ8Pz097SCpp6en1McBANfILPQAAFxH6AEANkHoAQA2QegBADZB6AEANkHoAQA2QegBADZB6AEANkHoAQA2QehZv+/fv//++++pSwEAiQk96/f58+ePHz+mLgUAJCb0rN/nz5+fn59TlwIAEhN61u/z588///xz6lIAQGJCz/r9+9//FnoAQOhZv69fv3748CF1KQAgMaFn/b5+/brb+aIB2Dp94fr98ccfQg8A6AvX7/X1VegBAH3h+h1Cz/fv31MXBABSEnrW788//xR6AEDoWb/v378LPQAg9KzfIfT8+eefqQsCACkJPet3CD2vr6+pCwIAKQk9myD0AIDQs07fv39/Dex2u19//fXzye+//566gABwb0LPOn379m037MuXL6kLCAD3JvSs1j//+c9o4vnw4cPff/+dunQAcG9Cz2r99ddfP/30Uz/0/Pbbb6mLBgAJCD1r9unTp07i+emnn/7666/U5QKABISeNfvx48eHDx/C0PPp06fUhQKA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HrpBf6vQE6SJwf5u4PaF0/1y5/Kqzsm12BVc/TNa0fUeOvDht03fVygaXq649Lw772jB6a32SmIFOiwevS5/ZPPjT7Cfs31GegA266Eb9KtDT/zOfPEnb42HixmDEb3Vvde9gG639HLt4dV0R3pGJ+j0J2uHOsHwlOWmR636nzlnopBL1gE266EbdP0NyamEAKvx0A26/obkVEKA1XjoBl1/Q3IqIcBqPHSDrr8hOZUQYDUeukHX35CcSgiwGg/doOtvSE4lBFiNh27Q9TckpxICrMZDN+j6G5JTCQFW46EbdP0NyamEAKvx0A26/obkVEKA1XjoBl1/Q3IqIcBqPHSDflV/c3oi+IDYc5fmPJz7cR+oxbsSegBW46Eb9Ov6m7oceHroQz8LlAcl9ACsxkM36EIPyQk9AKvx0A361aHHSSreitADsBoP3aAb6SE5oQdgNR66QX//kZ74e4uqGZjbHE9TrJjQA7AaD92gX9XfNFUxONJTzhvoWTok9PLyMv/N5EXoAViNh27Qb+lvmqo4DcwE/x1dojnlHKGHM6EHYDUeukFf2N+0R3IuU3taGaYuB85SHU5oFVUTLFCXg1Ofw6Aj9KyY0AOwGg/doC/ub5qqOKeUaOgZTjF1eclCYUqKni17eXkRejZC6AFYjYdu0K/pb87hJRJ6Bq/r6oShzumtumzNgH7pWVxI8iH0AKzGQzfo105kLqqmH3qGE09v/Kc3p6c7K0jW2Q6hB2A1HrpBv6m/aYWekavNI7OWI7/qjPY4pbUZQg/Aajx0g76ovxm7Pc/gDXfi12nFfttUhZv0bJHQA7AaD92gv39/c7lMfd9+2LpbN3Mg9ACsxkM36En6m/AKMBB6AFbjoRt0/Q3JqYQAq/HQDbr+huRUQoDVeOgGXX9DciohwGo8dIOuvyE5lRBgNR66QdffkJxKCLAaD92g629ITiUEWI2HbtD1NySnEgKsxkM36PobklMJAVbjoRt0/Q3JqYQAq/HQDbr+huRUQoDVeOgGXX9DciohwGo8dIOuvyE5lRBgNR66QdffkJxKCLAaD92g629ITiUEWI2HbtD1NySnEgKsxkM36PobklMJAVbjoRt0/Q3JqYQAq/HQDbr+huRUQoDVeOgGXX9DciohwGo8dIOuvyE5lRBgNR66QX96etpBUk9PT6mPAwDexkOHHgCAtyL0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJsg9AAAmyD0AACbIPQAAJvw/wGgBeqkC8n4UQAAAABJRU5ErkJggg==” alt=”” />

我们这里用的是SpringMvc的框架,所以要先知道SpingMvc的执行流程:

Springmvc提供统一处理器机制,springmvc的前端控制器在调用适配器,去调用action,过程中如果发生异常,前端控制器交给异常处理器进行异常处理。

前端控制器源代码:

我们来讲一下Springmvc中的异常处理机制:

进入到:

aaarticlea/png;base64,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” alt=”” />

我们看一下DispatcherServlet的源码:

这个类的核心函数就是:    protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {

我们在这个函数里面看到这个:

aaarticlea/png;base64,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” alt=”” />

processHandlerException就是处理异常的。

进入到这个函数看一下:

    protected ModelAndView processHandlerException(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception { // Check registered HandlerExceptionResolvers...
ModelAndView exMv = null;
//handlerExceptionResolvers是容器加载的时候把继承了HandlerExceptionResolver接口的类全部放入了handlerExceptionResolvers这个List里面。,具体是
//private void initHandlerExceptionResolvers(ApplicationContext context)这个函数完成.initHandlerExceptionResolvers函数里面有一句话
//    Map<String, HandlerExceptionResolver> matchingBeans =
// BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerExceptionResolver.class, true, false); for (HandlerExceptionResolver handlerExceptionResolver : this.handlerExceptionResolvers) {
exMv = handlerExceptionResolver.resolveException(request, response, handler, ex); // 遍历每一个实现了handlerExceptionResolver 接口的类,
然后调用它的 resolveException 方法进行异常处理
if (exMv != null) {
break;
}
}
if (exMv != null) {
if (exMv.isEmpty()) {
return null;
}
// We might still need view name translation for a plain error model...
if (!exMv.hasView()) {
exMv.setViewName(getDefaultViewName(request));
}
if (logger.isDebugEnabled()) {
logger.debug("Handler execution resulted in exception - forwarding to resolved error view: " + exMv, ex);
}
WebUtils.exposeErrorRequestAttributes(request, ex, getServletName());
return exMv;
} throw ex;
}

观察代码,发现在这里会遍历 Ioc 容器中的所有实现 handlerExceptionResolver 接口的类,然后调用它的 resolveException 方法进行异常处理,并返回具体的error page(错误页面)。

这个博客讲得很好:http://blog.csdn.net/u012420654/article/details/52141807

总结:也就是说我们要写自定义的异常处理器,就需要继承handlerExceptionResolver 接口。然后实现里面的resolveException方法,这样出现了错误之后就会去

执行我们自己写的resolveException()方法。

接下里我们写自己的异常处理器。

package yycg.base.process.exception;import java.io.IOException;
import java.lang.reflect.Method;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;import yycg.base.process.result.ExceptionResultInfo;
import yycg.base.process.result.ResultInfo;//全局异常处理器
public class ExceptionResolverCustom implements HandlerExceptionResolver{
//json转换器
private HttpMessageConverter<ExceptionResultInfo> jsonMessageConverter;
public HttpMessageConverter<ExceptionResultInfo> getJsonMessageConverter() {
return jsonMessageConverter;
}
public void setJsonMessageConverter(
HttpMessageConverter<ExceptionResultInfo> jsonMessageConverter) {
this.jsonMessageConverter = jsonMessageConverter;
}
//前端控制器
//handler就是最后要执行的Action类,Springmvc是面向方法开发的。handler就包装了一个方法
//这个方法就对应于URL的那个方法,
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) { //输出异常信息
ex.printStackTrace();
//在springmvc中,action是被Handle封装起来的,action的方法也被封装到Handle里面了。
//转成springmvc底层对象,这个底层对象就是对action方法进行封装的那个对象
HandlerMethod handlerMethod=(HandlerMethod)handler;//这个对象里面只有一个方法。
Method method=handlerMethod.getMethod();//把这个方法取出来。
//查找method这个方法上是否有ResponBody这个注解
ResponseBody responseBody=AnnotationUtils.findAnnotation(method, ResponseBody.class); if(responseBody!=null)
{
//这里说明发生异常的Action是我们本来正常情况下要返回JSON数据的,我们在这里做的处理时是把这个错误拿出来我们自己转成json
          //再输出到页面上return this.resolveJsonException(request, response, handlerMethod, ex); 
}
//这里说明发生异常的那个Action方法没有用@Responbody定义。正常情况也不是返回json格式的数据的,那我们就没有必要转换成json了。
//解析异常
ExceptionResultInfo exceptionResultInfo=resolveExceptioncustom(ex);
//将异常信息在异常页面输出。
request.setAttribute("exceptionResultInfo", exceptionResultInfo.getResultInfo());
//转向错误页面:用Springmvc的方式去转
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("exceptionResultInfo", exceptionResultInfo.getResultInfo()); modelAndView.setViewName("/base/error");
return modelAndView; } private ModelAndView resolveJsonException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)
{
//解析异常
ExceptionResultInfo exceptionResultInfo=resolveExceptioncustom(ex);
HttpOutputMessage outputMessage=new ServletServerHttpResponse(response); try {
//将exceptionResultInfo转成json然后输出,这里直接通过HttpMessageConverter将exceptionResultInfo转化为
//JSON,然后直接在HttpOutputMessage这个对象中把转化而成的JSON信息写入。输出到浏览器客户端。 jsonMessageConverter.write(exceptionResultInfo,MediaType.APPLICATION_JSON,outputMessage );
} catch (HttpMessageNotWritableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new ModelAndView();
} //解析异常,看是不是我们自己定义的异常
private ExceptionResultInfo resolveExceptioncustom( Exception ex)
{
ResultInfo resultInfo=null; //这样的话就是系统的自定义异常
if(ex instanceof ExceptionResultInfo)
{
//解析系统的自定义的异常,
resultInfo=((ExceptionResultInfo) ex).getResultInfo(); }else {
//不属于系统自定义异常的话就是未知错误的异常,就是不可知的异常
resultInfo=new ResultInfo();
resultInfo.setType(ResultInfo.TYPE_RESULT_FAIL);
resultInfo.setMessage("未知错误异常"); }
return new ExceptionResultInfo(resultInfo); }}

总结:就是说浏览器进入到了Action中的方法中,在执行过程中,发生了异常。然后触发了我们的自定义异常处理器。进入到了resolveException()这个方法。

在这个方法里面首先要做的就是把封装到Handle中的那个Action取出来,然后把这个Action对象中执行的那个方法取出来。看这个方法有没有ResponBody这个注解这个注解,有的话就是说使我们自己定义的异常信息,比如账号重复什么的,我们是要求把这个“账号重复”这类异常信息变成JSON信息放到客户端的,所以就把这个异常信息转化为json格式输出到页面。

然后如果发现这个方法没有ResponBody这个注解,那么我们这个就不是我们自定义的异常了,那么我们把这个异常信息解析好之后,通过自己定义的error.jsp页面把错误信息输出。

上面已经写好了异常处理类,接下来我们就把这个异常处理类配置好。

来到Springmvc.xml中:

 <bean id="handlerExceptionResolver" 这个id要固定,一个字都不能改。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "> <!-- 组件扫描 扫描所有标记@Controller类,由于使用自动扫描所以action类不用在spring配置文件中配置 -->
<!-- 为什么这里就要用包扫面的方式了而不是用bean 的方式了因为这里的action太多了,配置不过来,只好用扫描了 -->
<context:component-scan base-package="yycg.**.action" /> <!-- 处理器映射器和适配器,可以使用mvc注解驱动 -->
<mvc:annotation-driven/> <!-- 视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 将jstl的jar包加入工程,默认支持jstl -->
<!-- 前缀和后缀可以去掉的,为了方便开发才加的 -->
<property name="prefix" value="/WEB-INF/jsp" />
<property name="suffix" value=".jsp" />
</bean> <!-- json提供的json转换器 -->
<bean id="jsonmessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean> <!-- 配置统一异常处理器类 -->
<bean id="handlerExceptionResolver"
class="yycg.base.process.exception.ExceptionResolverCustom"
>
<!-- 注入一个json转换器-->
<property name="jsonMessageConverter" ref="jsonmessageConverter"/> </bean></beans>

然后我们还要在web.xml中进行配置。

在web.xml中添加如下:

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param> <!-- 屏蔽springmvc自动注册的异常处理器 -->
<init-param>
<param-name>detectAllHandlerExceptionResolvers</param-name>
<param-value>false</param-value>
</init-param> </servlet>

detectAllHandlerExceptionResolvers的作用:屏蔽自动注册异常处理器,固定使用bean的id为handlerExceptionResolver的异常处理器。(所以自定义的异常处理器的id是要要固定的)

接下来我们可以把之前的在Action中try{}catch的做法给去掉了。达到我们最先的想法。

修改后的代码如下:

    @RequestMapping("/addsysusersubmit")
public @ResponseBody SubmitResultInfo addsysusersubmit(SysuserQueryVo sysuserQueryVo) throws Exception
{
ResultInfo resultInfo=new ResultInfo();
resultInfo.setType(ResultInfo.TYPE_RESULT_SUCCESS);//默认是成功的
resultInfo.setMessage("成功了");
SubmitResultInfo submitResultInfo=new SubmitResultInfo(resultInfo);
userService.insertSysuser(sysuserQueryVo.getSysuserCustom());
//使用全局异常处理器后不用捕获异常了。
submitResultInfo.setResultInfo(resultInfo); return submitResultInfo; }

到这里,我们的配置就好了接下里就是测试:现在只要在执行Acition里面的任何方法时遇到任何问题都会由这个异常处理器来处理.

测试如下:

1、  在action的提交方法(addsysusersubmit(SysuserQueryVo sysuserQueryVo) )中发生异常,由全局异常处理器进行处理。

aaarticlea/png;base64,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” alt=”” />

2、在action返回jsp方法中发生异常,由全局异常处理器进行处理。

测试方法:我们在随便一个Action的方法中写一句:int i=1/0;

然后就出现了:

aaarticlea/png;base64,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” alt=”” />

测试成功

——————————————————————————————————————————————

第二次看自己的博客时有点绕晕。我写一个具体的案例,结合代码来讲解一下:

我们看userAction:里面有这么一段代码:

    //添加用户提交
//提交的结果要转json到页面
//提交表单的数据一律使用包装类,这里我们用的是SysuserQueryVo
//在SysuserQueryVo中包装了SysuserCustom
@RequestMapping("/addsysusersubmit")
public @ResponseBody SubmitResultInfo addsysusersubmit(SysuserQueryVo sysuserQueryVo) throws Exception
{
//将执行结果返回页面 userService.insertSysuser(sysuserQueryVo.getSysuserCustom());
//使用全局异常处理器后不用捕获异常了。
//submitResultInfo.setResultInfo(resultInfo);
return ResultUtil.createSubmitResult(ResultUtil.createSuccess(Config.MESSAGE,906 , null)); }

我们看一下userService.insertSysuser(sysuserQueryVo.getSysuserCustom());这个函数:

@Override
public void insertSysuser(SysuserCustom sysuserCustom) throws Exception {
//参数的校验
//通用的参数合法性校验
Sysuser sysuser=findSysuerByUserid(sysuserCustom.getUserid());
//如果不等于空,就是账号重复了。给出一个警告。
if(sysuser!=null)
{
//包警告告诉到Action,可以再Aciton中捕获这个异常。
//throw new Exception("单位名称输入错误");
//使用系统自定义的异常类
/*ResultInfo resultInfo=new ResultInfo();
resultInfo.setType(ResultInfo.TYPE_RESULT_FAIL);
String message=ResourcesUtil.getValue("resources.messages", "213");
resultInfo.setMessage(message);
throw new ExceptionResultInfo(resultInfo);*/
//使用工具类对ResultInfo做一个封装。
ResultInfo resultInfo=ResultUtil.createFail(Config.MESSAGE, 213, null);
new ResultUtil().throwExcepion(resultInfo);
}
//根据用户类型,输入单位名称必须存在对应的单位表中
String groupid=sysuserCustom.getGroupid();//用户类型
String sysmc=sysuserCustom.getSysmc();//单位名称
String userid=null;
if(groupid.equals("1")||groupid.equals("2"))
{//监督单位
//根据单位名称查询单位的信息。
Userjd userjd=this.findUserJdByMc(sysmc);
if(userjd==null)
{
//throw new Exception("单位名称输入错误");
//使用系统自定义的异常类
ResultInfo resultInfo=new ResultInfo();
resultInfo.setType(ResultInfo.TYPE_RESULT_FAIL);
resultInfo.setMessage("单位名称输入错误");
throw new ExceptionResultInfo(resultInfo);
} userid=userjd.getId(); }
//卫生室
else if(groupid.equals("3"))
{ //根据单位名称查询单位的信息,查不到就报错
Useryy useryy=this.findUseryyByMc(sysmc);
if(useryy==null)
{
//throw new Exception("单位名称输入错误");
//使用系统自定义的异常类
ResultInfo resultInfo=new ResultInfo();
resultInfo.setType(ResultInfo.TYPE_RESULT_FAIL);
resultInfo.setMessage("单位名称输入错误");
throw new ExceptionResultInfo(resultInfo);
}
userid=useryy.getId();
}
else if(groupid.equals("4")){
Usergys usergys=this.findUsergesByMc(sysmc);
if(usergys==null)
{
//throw new Exception("单位名称输入错误");
//使用系统自定义的异常类
ResultInfo resultInfo=new ResultInfo();
resultInfo.setType(ResultInfo.TYPE_RESULT_FAIL);
resultInfo.setMessage("单位名称输入错误");
throw new ExceptionResultInfo(resultInfo);
}
userid=usergys.getId();
}
sysuserCustom.setId(UUIDBuild.getUUID());
sysuserCustom.setSysid(userid);
//把数据插入到数据库
//刚开始的时候感到很奇怪,就是在SysuserMapper.xml中写着输入的参数是yycg.base.pojo.po.Sysuser
//但是我这里输入的是sysuserCustom,明显不是Sysuser类型啊,其实是没有关系的,因为,这里的sysuserCustom
//继承了Sysuser.所以Sysuser里面有的,在SysuserCustom里面都是有的的。
sysuserMapper.insert(sysuserCustom); }

如果账号重复了:执行了

 ResultInfo resultInfo=ResultUtil.createFail(Config.MESSAGE, 213, null);
new ResultUtil().throwExcepion(resultInfo);这样就触发了异常。
我们这个Action是用@ResponseBody注释的。那么正常情况下我们应该是要返回json数据的。
但是这个抛异常了,不是正常情况了,但是我们也要返回json数据。所以有了
        if(responseBody!=null)
{
//这里说明发生异常的Action是我们本来正常情况下要返回JSON数据的,我们在这里做的处理时是把这个错误拿出来我们自己转成json
          //再输出到页面上return this.resolveJsonException(request, response, handlerMethod, ex); 
}那些没有用@ResponseBody注释的Action方法,他们的异常处理就按照正规思路处理了。
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,158
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,625
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,470
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,242
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,878
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,046