spring controller定义一个返回json或视图的方法

@Response注解使用后,将不会走spring的视图解析器,效果等同于通过response对象输出指定格式的数据。

现在有一个需求,定义一个可以同时处理ajax请求异常和页面跳转异常的方法。

返回类型用ModelandView,String都不方便,也不能加@Response注解,

所以返回类型用void,通过最原始的servlet代码完成页面跳转或者返回json数据。

@ControllerAdvice
public class ImmocExceptionHandler {
    public static final String ERROR_VIEW = "error";
    @Autowired
    private Gson gson;
    @ExceptionHandler(value = Exception.class)
    public void exceptionHandler(HttpServletRequest request, HttpServletResponse         response,
                                 Exception e, Model model) throws Exception {
        if (isAjax(request)) {
            // 向response中写json数据
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/json; charset=utf-8");
            PrintWriter writer = response.getWriter();
            writer.write(gson.toJson(JsonResult.errorException(e.getMessage())));
        } else {
            request.setAttribute("exception", e);
            request.setAttribute("url", request.getRequestURL());
            request.getRequestDispatcher("/templates/error.html").forward(request,
                    response);
        }
    }

    public static boolean isAjax(HttpServletRequest httpRequest) {
        return (httpRequest.getHeader("X-Requested-With") != null
                && "XMLHttpRequest"
                .equals(httpRequest.getHeader("X-Requested-With").toString()));
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值