Jersey统一异常处理
@Provider
public class ExceptionHandler implements ExceptionMapper<RuntimeException> {
@Context
private HttpServletRequest request;
@Override
public Response toResponse(RuntimeException exception) {
return Response.ok(Response.Status.OK, MediaType.APPLICATION_JSON_TYPE).entity(entity).build();
}
}
SpringMVC统一异常处理
输出到页面
public class CustomExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", customException.getMessage());
modelAndView.setViewName("/WEB-INF/jsp/error.jsp");
return modelAndView;
}
}
输出Json格式
public class GlobalExceptionTranslator implements HandlerExceptionResolver {
private HttpMessageConverter messageConverter;
public HttpMessageConverter getMessageConverter() {
return messageConverter;
}
public void setMessageConverter(HttpMessageConverter messageConverter) {
this.messageConverter = messageConverter;
}
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){
HttpOutputMessage outputMessage = new ServletServerHttpResponse(response);
if(AjaxRequestUtils.isAjaxRequest(request)){
HttpMessageConverter messageConverter = getMessageConverter();
if (messageConverter != null) {
Throwable cause = ex.getCause();
if(cause != null && cause instanceof NestedSQLException){
NestedSQLException nestedSQLException = (NestedSQLException)cause;
if(nestedSQLException.getErrorCode() == 1062){
write(messageConverter,ResponseCode.USERNAME_NOT_UNIQUE,outputMessage);
return new ModelAndView();
}
}
write(messageConverter,ResponseCode.SERVICE_UNAVAILABLE,outputMessage);
return new ModelAndView();
}
}
return null;
}
private void write(HttpMessageConverter messageConverter, ResponseCode responseCode, HttpOutputMessage outputMessage){
Response response = Response.ResponseBuilder.newInstance().withResponseCode(responseCode).build();
try {
messageConverter.write(response, MediaType.APPLICATION_JSON, outputMessage);
} catch (IOException e) {
Logger.error(this,String.format("Error while writing json response : %s .",new Gson().toJson(response)), e);
}
}
}
配置bean
<bean class="com.exception.GlobalExceptionTranslator">
<property name="messageConverter">
<bean class="org.springframework.http.converter.json.GsonHttpMessageConverter" />
</property>
</bean>