(办公)springmvc->controller的统一异常层,返回json
controller里面写的代码,很多时候,没有写try{}catch(Exceiption ex){},结果就是系统出错,就算是接口,参数正确也会返回404,这个是不应该的.
下面是代码,以后参考
package com.lianrong.manager.controller.;
import org.apache.zookeeper.proto.ErrorResponse;
import org.springframework.beans.ConversionNotSupportedException;
import org.springframework.beans.TypeMismatchException;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.web.HttpMediaTypeNotAcceptableException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.EnableWebMvc; import javax.servlet.http.HttpServletRequest;
import java.io.IOException; @ControllerAdvice
@EnableWebMvc
public class RestExceptionHandler { @ExceptionHandler(Exception.class)
@ResponseBody
public String handleException(){
return "Exception Deal!";
}
//运行时异常
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public ServiceResult runtimeExceptionHandler(RuntimeException runtimeException) {
return new ServiceResult(false,"","1000运行时异常");
} //空指针异常
@ExceptionHandler(NullPointerException.class)
@ResponseBody
public ServiceResult nullPointerExceptionHandler(NullPointerException ex) {
ex.printStackTrace();
return new ServiceResult(false,"","1001空指针异常");
}
//类型转换异常
@ExceptionHandler(ClassCastException.class)
@ResponseBody
public ServiceResult classCastExceptionHandler(ClassCastException ex) {
ex.printStackTrace();
return new ServiceResult(false,"","1002类型转换异常");
} //IO异常
@ExceptionHandler(IOException.class)
@ResponseBody
public ServiceResult iOExceptionHandler(IOException ex) {
ex.printStackTrace();
return new ServiceResult(false,"","1003IO异常");
}
//未知方法异常
@ExceptionHandler(NoSuchMethodException.class)
@ResponseBody
public ServiceResult noSuchMethodExceptionHandler(NoSuchMethodException ex) {
ex.printStackTrace();
return new ServiceResult(false,"","1004未知方法异常");
} //数组越界异常
@ExceptionHandler(IndexOutOfBoundsException.class)
@ResponseBody
public ServiceResult indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException ex) {
ex.printStackTrace();
return new ServiceResult(false,"","1005数组越界异常");
}
//400错误
@ExceptionHandler({HttpMessageNotReadableException.class})
@ResponseBody
public ServiceResult requestNotReadable(HttpMessageNotReadableException ex){
System.out.println("400..requestNotReadable");
ex.printStackTrace();
return new ServiceResult(false,"","400..requestNotReadable");
}
//400错误
@ExceptionHandler({TypeMismatchException.class})
@ResponseBody
public ServiceResult requestTypeMismatch(TypeMismatchException ex){
System.out.println("400..TypeMismatchException");
ex.printStackTrace();
return new ServiceResult(false,"","400..TypeMismatchException");
}
//400错误
@ExceptionHandler({MissingServletRequestParameterException.class})
@ResponseBody
public ServiceResult requestMissingServletRequest(MissingServletRequestParameterException ex){
System.out.println("400..MissingServletRequest");
ex.printStackTrace();
return new ServiceResult(false,"","400..MissingServletRequest");
}
//405错误
@ExceptionHandler({HttpRequestMethodNotSupportedException.class})
@ResponseBody
public ServiceResult request405(){
System.out.println("405...");
return new ServiceResult(false,"","");
}
//406错误
@ExceptionHandler({HttpMediaTypeNotAcceptableException.class})
@ResponseBody
public ServiceResult request406(){
System.out.println("404...");
return new ServiceResult(false,"","");
}
//500错误
@ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class})
@ResponseBody
public ServiceResult server500(RuntimeException runtimeException){
System.out.println("500...");
return new ServiceResult(false,"","");
} }
注意事项,先干掉默认的SimpleMappingExceptionResolver
springmvc 默认的异常,dispatcher-servlet.xml
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error"/>
<property name="defaultStatusCode" value=""/>
<property name="statusCodes">
<props>
<prop key=""></prop>
<prop key="error"></prop>
</props>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">error</prop>
<prop key="org.springframework.web.bind.ServletRequestBindingException">error</prop>
<prop key="java.lang.IllegalArgumentException">error</prop>
<prop key="org.springframework.validation.BindException">error</prop>
<prop key="java.lang.ClassNotFoundException">error</prop>
</props>
</property>
<property name="warnLogCategory" value="com.lianrong.manager">
</property>
</bean>
(办公)springmvc->controller的统一异常层,返回json的更多相关文章
- springmvc全局异常后返回JSON异常数据
转自:http://www.cnblogs.com/exmyth/p/5601288.html (1)自定义或者使用spring自带的各种异常处理器 例如spring基于注解的异常解析器Annotat ...
- Spring MVC全局异常后返回JSON异常数据
问题: 当前项目是作为手机APP后台支持,使用spring mvc + mybaits + shiro进行开发.后台服务与手机端交互是发送JSON数据.如果后台发生异常,会直接返回异常页面,显示异常内 ...
- SpringMVC 避免IE执行AJAX时,返回JSON出现下载文件
<?xml version="1.0" encoding="UTF-8"?> <!-- SpringMVC配置文件 --> <be ...
- 关于Controller层返回JSON字符串
/** * 导入jackson包. * @param pn * @return */ @RequestMapping("/emps") @ResponseBody public M ...
- SpringMVC 配置.html拦截时,返回JSON数据时出现406错误解决方案
[说明]在SpringMVC框架的使用中常常会使用@ResponseBody注解,修饰"处理器"(Controller的方法),这样在处理器在返回完毕后,就不走逻辑视图,而是将返回 ...
- SpringMVC避免IE执行AJAX,返回JSON出现下载文件
- spring入门(七)【springMVC返回json串】
现在多数的应用为了提高交互性多使用异步刷新,即在不刷新整个页面的情况下,只刷新局部,局部刷新用得最多就是ajax,ajax和后台进行交互的数据格式使用的最多的是JSON,这里简单描述,在springm ...
- SpringMVC返回JSON方案
SpringMVC已经大行其道.一般的,都是返回JSP视图.如果需要返回JSON格式,我们大都掌握了一些方法. 在ContentNegotiatingViewResolver之前,一般使用XmlVie ...
- springmvc返回json字符串中文乱码问题
问题: 后台代码如下: @RequestMapping("menuTreeAjax") @ResponseBody /** * 根据parentMenuId获取菜单的树结构 * @ ...
随机推荐
- 服务端预渲染之Nuxt(介绍篇)
现在前端开发一般都是前后端分离,mvvm和mvc的开发框架,如Angular.React和Vue等,虽然写框架能够使我们快速的完成开发,但是由于前后台分离,给项目SEO带来很大的不便,搜索引擎在检索的 ...
- clang如何获得程序控制流图
在低版本的clag中,可以直接clang -cc1 -analyze -cfg-dump 1.c来获得程序控制流图,但较高版本后就不行了 另外clang -cc1默认仅限当前目录,所以会出现fata ...
- 委托与lambda关系
什么是委托委托是没有方法体的,声明委托就是一个关键字: delegate ,委托可以试有参无参,有返回值无返回值.和我们的方法是一样的.不同的区别是 委托没有方法体的,委托可放在类下也可以放在类的外面 ...
- Sql 优化解决方案
转自:https://blog.csdn.net/jie_liang/article/details/77340905 用以记录: 在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行 ...
- Spring Boot 2.X 如何快速集成单元测试?
本文将详细介绍下使用Spring Boot 2.X 集成单元测试,对API(Controller)测试的过程. 一.实现原理 使用MockMvc发起请求,然后执行API中相应的代码,在执行的过程中使m ...
- Cookie、LocalStorage 与 SessionStorage的区别在哪里?
基本概念 Cookie Cookie 是小甜饼的意思.顾名思义,cookie 确实非常小,它的大小限制为4KB左右.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码”,这通常就是通 ...
- css实现3D切换功能
Demo asdasdasd <!DOCTYPE html> <html lang="en"> <head> <title>De ...
- Canvas引入跨域的图片导致toDataURL()报错的问题的解决
本文介绍了Canvas引入跨域的图片导致toDataURL()报错的问题的解决,分享给大家,具体如下: [场景] 用户打开网页,则请求腾讯COS(图片服务器)上的图片js代码.使用canvas绘图. ...
- Git:四、连接GitHub远程仓库
1.拥有一个GitHub网站的账号 2.创建SSH Key 打开终端(Windows打开Git Bash),输入: ssh-keygen -t rsa -C "youremail@??.co ...
- 一个非常简单的IMPDP事儿
EXPDP出来的DMP文件包含2个Schema的表,现在要IMPDP到一个Schema里面试了几把都报错,好久不用逻辑导出入,折腾了好久,出现各种错误1.创建目录并授权create or replac ...