(办公)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获取菜单的树结构 * @ ...
随机推荐
- 基于Servlet+jsp的web计算器
基于Servlet+jsp的web计算器 这次老大为了让我们自己复习web中页面的跳转给布置得任务 天下代码一大抄,关键看你怎么抄 首先我想到的计算算法不是什么堆栈,是简单的(其实很复杂,但是我就只需 ...
- Android音视频之AudioTrack播放音频(二)
前一篇讲了如何录制wav音频文件,本篇就来讲讲如何播放wav文件,这里就是使用AudioTrack来播放音频,确切的说是播放pcm格式数据,使用AudioTrack播放也没什么难度,主要就是将数据写入 ...
- Java辅助类持续汇总~
/** * 01 * 描述:List<String>集合去除重复数据 * [时间 2019年3月5日下午3:54:09 作者 陶攀峰] */ public static List<S ...
- kafka监控项目大全
https://github.com/claudemamo/kafka-web-console http://github.com/pinterest/doctorkafka http://g ...
- 华为云.NET Core支持情况调查
各大公有云都提供了开发者开发的SDK,今天我们来看看华为云对.NET Core的支持情况怎么样? .NET SDK地址 https://developer.huaweicloud.com/sdk#.N ...
- PHP全栈学习笔记14
一.搭建PHP开发环境 Apahce服务器 Dreamwear创建站点 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- 90后的青春,定格在被淡忘的QQ空间里
QQ空间,这个曾经陪我们从童年到少年再到成年,从2G时代再到如今的4G末,占据了我们太多的青春回忆,如今好友空间动态更新的不在像从前那样频繁.依稀记得当年的好友买卖,抢车位再或者情侣空间,现在想想那时 ...
- 100 - k8s源码分析-准备工作
今天我们开始讲kubernetes的源码! 之前的其他开源项目还没有说完,后续会陆陆续续更新,我们把主线先放到k8s的源码上. 之前我想详细讲解每一行k8s源码,但是越看越发现一个大型开源项目如果拘泥 ...
- (二)surging 微服务框架使用系列之surging 的准备工作consul安装
suging 的注册中心支持consul跟zookeeper.因为consul跟zookeeper的配置都差不多,所以只是consul的配置 consul下载地址:https://www.consul ...
- 为 Eureka 服务注册中心实现安全控制
上一篇Eureka 实现微服务注册发现讲了用 Eureka 实现单体版的服务注册与发现.因为本篇是在上一篇的基础上的一点扩充,所以读此篇之前要保证看了上一篇. Eureka 如果不加安全控制,会存在下 ...