This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
galaxy-k18-galaxy-service/src/main/java/com/nis/restful/RestServiceExceptionHandler.java

94 lines
3.1 KiB
Java
Raw Normal View History

2017-12-19 14:55:52 +08:00
/**
* @Title: RestServiceExceptionHandler.java
* @Package com.nis.restful
* @Description: TODO(用一句话描述该文件做什么)
* @author darnell
* @date 2016年8月24日 上午11:31:47
* @version V1.0
*/
package com.nis.restful;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* @ClassName: RestServiceExceptionHandler
* @Description: TODO(rest异常处理需要判断是否为rest异常如果不是则交给正常页面异常处理否则抛出json格式错误.判断是否rest异常需要具体项目具体实现默认统一为true)
* @author (darnell)
* @date 2016年8月24日 上午11:31:47
* @version V1.0
*/
public class RestServiceExceptionHandler extends DefaultHandlerExceptionResolver{
protected static final Logger LOGGER = LoggerFactory.getLogger(RestServiceExceptionHandler.class);
/**
* 通过xml文件配置可能存在自定义的异常类型
*/
private RestErrorResolver errorResolver;
@Autowired
private RestConverter<?> errorConverter; //错误信息转换器
/**
* 确认是否rest服务方法需要子类重写
* 如果不是则不做处理直接交给父类处理
* @param request
* @return 是否为rest服务
*/
public boolean isRestServiceException(HttpServletRequest request){
return true;
}
@Override
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
if (isRestServiceException(request)) {
RestResult error = errorResolver.resolveError(request, handler, ex);
response.setStatus(error.getStatus().value());
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
ObjectMapper mapper = new ObjectMapper();
try {
JsonGenerator jsonGenerator = mapper.getFactory()
.createGenerator(response.getOutputStream(),
JsonEncoding.UTF8);
mapper.writeValue(jsonGenerator, errorConverter.convert(error));
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return new ModelAndView();
} else {
return super.doResolveException(request, response, handler, ex);
}
}
public RestErrorResolver getErrorResolver() {
return errorResolver;
}
public void setErrorResolver(RestErrorResolver errorResolver) {
this.errorResolver = errorResolver;
}
}