SpringMVC之JSON返回及异常处理机制

172 阅读2分钟

SpringMVC是一个基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架。在SpringMVC中,我们可以通过@ResponseBody注解和@ControllerAdvice注解来实现JSON返回和异常处理。

首先,我们来看看如何在SpringMVC中返回JSON数据。通常情况下,我们会使用@ResponseBody这个注解。这个注解可以放在方法上,也可以放在类上。

当你把@ResponseBody放到方法上时,表示该方法的返回结果直接写入HTTP response body中(一般用于异步获取数据),HTTP response body中数据不是html标签的页面源码(比如json、xml等),所以也就不会被视图渲染器处理。

当你把@ResponseBody放到类上时,则表示该类所有方法都会直接写入HTTP response body而不进行视图渲染。

例如:

@Controller
public class MyController {
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ResponseBody
    public Map<String, Object> test() {
        Map<String, Object> map = new HashMap<>();
        map.put("key", "value");
        return map;
    }
}
​

以上代码将以JSON格式返回一个键值对"key":"value"。注意:为了能够让Spring MVC输出Json格式需要添加相关依赖库(比如jackson)到项目里面去。

然后让我们看一下异常处理机制,在Spring MVC 3.2之后提供了@ControllerAdvice这个特性用于全局异常处理、全局数据绑定、全局数据预处理。我们可以通过@ControllerAdvice来实现全局异常处理。

@ControllerAdvice是一个@Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping的方法。简单来说就是所有的@RequestMapping都会先执行这个(如果有定义的话)。

例如:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Map<String, Object> handleException(Exception e) {
        Map<String, Object> map = new HashMap<>();
        map.put("errorCode", 500);
        map.put("errorMsg", e.getMessage());
        return map;
    }
}
​

以上代码表示当程序出现Exception类型异常时,会被handleException方法捕获到,并返回一个包含错误码和错误信息的JSON数据。

总结一下,在SpringMVC中我们可以通过@ResponseBody注解返回JSON数据,并且可以使用@ControllerAdvice注解进行全局异常处理。这两个功能在实际开发中非常常用,并且使用起来也非常方便。

蓝易云-五网CN2服务器【点我购买】

蓝易云采用KVM高性能架构,稳定可靠,安全无忧!
蓝易云服务器真实CN2回国线路,不伪造,只做高质量海外服务器。


海外免备案云服务器链接:www.tsyvps.com

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。