package org.hsweb.web.controller;
import com.alibaba.fastjson.JSON;
import org.hsweb.web.core.exception.*;
import org.hsweb.web.core.message.ResponseMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.ExceptionHandler;
import javax.servlet.http.HttpServletResponse;
@ControllerAdvice(annotations = {RestController.class, ResponseBody.class})
@Order(1)
public class RestControllerExceptionTranslator {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@ExceptionHandler(ValidationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
ResponseMessage handleException(ValidationException exception) {
return ResponseMessage.error(exception.getMessage(), 400);
}
@ExceptionHandler(org.hsweb.ezorm.rdb.exception.ValidationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
ResponseMessage handleException(org.hsweb.ezorm.rdb.exception.ValidationException exception) {
return ResponseMessage.error(JSON.toJSONString(exception.getValidateResult()), 400);
}
@ExceptionHandler(BusinessException.class)
@ResponseBody
ResponseMessage handleException(BusinessException exception, HttpServletResponse response) {
response.setStatus(exception.getStatus());
if (exception.getCause() != null) {
logger.error("{}:{}", exception.getMessage(), exception.getStatus(), exception.getCause());
}
return ResponseMessage.error(exception.getMessage(), exception.getStatus());
}
@ExceptionHandler(AuthorizeException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
@ResponseBody
ResponseMessage handleException(AuthorizeException exception) {
return ResponseMessage.error(exception.getMessage(), exception.getStatus());
}
@ExceptionHandler(AuthorizeForbiddenException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
@ResponseBody
ResponseMessage handleException(AuthorizeForbiddenException exception) {
return ResponseMessage.error(exception.getMessage(), exception.getStatus());
}
@ExceptionHandler(NotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
@ResponseBody
ResponseMessage handleException(NotFoundException exception) {
return ResponseMessage.error(exception.getMessage(), 404);
}
@ExceptionHandler(Throwable.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
ResponseMessage handleException(Throwable exception) {
logger.error("未知错误", exception);
return ResponseMessage.error(exception.getMessage(), 500);
}
}