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的更多相关文章

  1. springmvc全局异常后返回JSON异常数据

    转自:http://www.cnblogs.com/exmyth/p/5601288.html (1)自定义或者使用spring自带的各种异常处理器 例如spring基于注解的异常解析器Annotat ...

  2. Spring MVC全局异常后返回JSON异常数据

    问题: 当前项目是作为手机APP后台支持,使用spring mvc + mybaits + shiro进行开发.后台服务与手机端交互是发送JSON数据.如果后台发生异常,会直接返回异常页面,显示异常内 ...

  3. SpringMVC 避免IE执行AJAX时,返回JSON出现下载文件

    <?xml version="1.0" encoding="UTF-8"?> <!-- SpringMVC配置文件 --> <be ...

  4. 关于Controller层返回JSON字符串

    /** * 导入jackson包. * @param pn * @return */ @RequestMapping("/emps") @ResponseBody public M ...

  5. SpringMVC 配置.html拦截时,返回JSON数据时出现406错误解决方案

    [说明]在SpringMVC框架的使用中常常会使用@ResponseBody注解,修饰"处理器"(Controller的方法),这样在处理器在返回完毕后,就不走逻辑视图,而是将返回 ...

  6. SpringMVC避免IE执行AJAX,返回JSON出现下载文件

  7. spring入门(七)【springMVC返回json串】

    现在多数的应用为了提高交互性多使用异步刷新,即在不刷新整个页面的情况下,只刷新局部,局部刷新用得最多就是ajax,ajax和后台进行交互的数据格式使用的最多的是JSON,这里简单描述,在springm ...

  8. SpringMVC返回JSON方案

    SpringMVC已经大行其道.一般的,都是返回JSP视图.如果需要返回JSON格式,我们大都掌握了一些方法. 在ContentNegotiatingViewResolver之前,一般使用XmlVie ...

  9. springmvc返回json字符串中文乱码问题

    问题: 后台代码如下: @RequestMapping("menuTreeAjax") @ResponseBody /** * 根据parentMenuId获取菜单的树结构 * @ ...

随机推荐

  1. Unity C#笔记 协程

    什么是协程 协同程序,在主程序运行的同时,开启另外一段逻辑处理,来协同当前程序的执行. 可能看了这段文字介绍还是有点模糊,其实可以用多线程来比较. 多线程 多线程,顾名思义,多条同时执行的线程. 最初 ...

  2. Android版数据结构与算法(三):基于链表的实现LinkedList源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. LinkedList 是一个双向链表.它可以被当作堆栈.队列或双端队列进行操作.LinkedList相对于ArrayList来说,添加,删除元素效 ...

  3. 第11章 创建请求URLs - IdentityModel 中文文档(v1.0.0)

    该RequestUrl是创建与查询字符串参数,例如URL的帮手: var ru = new RequestUrl("https://server/endpoint"); // pr ...

  4. Geoserver+Openlayers拉框查询

    1.代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co ...

  5. 解决Maven无法下载fastdfs-client-java依赖,Dependency 'org.csource:fastdfs-client-java:1.27-SNAPSHOT' not found.

    因为fastdfs-client-java-1.27-SNAPSHOT.jar这个依赖包在maven中央仓库是没有的, 需要自己编译源码成jar本地安装到maven 的本地仓库,安装完以后就能正常引用 ...

  6. window下编译jcef

    自行编译jcef过程中遇到了一些问题,现在记录如下. 参考的主要文章是jcef的官方介绍: https://bitbucket.org/chromiumembedded/java-cef/wiki/B ...

  7. Linux 桌面玩家指南:18. 使用 Docker 隔离自己的开发环境和部署环境

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  8. Java遍历List集合的4种方式

    public class Test { public static void main(String[] args) { // 循环遍历List的4中方法 List<String> str ...

  9. MySQL学习(一)日志与索引 --- 2019年1月

    1.MySQL的架构 1).连接器 先根据Ip和端口号,用户名和密码,连接MySQL数据库,连接后如果没有下一步动作,连接就处于空闲状态,此时有一个连接超时时间的设置 wait_timeout默认8小 ...

  10. Linux下安装vmtools的语句

    sudo apt-get upgrade sudo apt-get install open-vm-tools-desktop -y sudo reboot 出现提示信息不确定就默认就好,一路y或ye ...