package com.example.hotel.exception;
import com.example.hotel.dto.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.ui.Model;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.NoHandlerFoundException;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.ValidationException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* 全局异常捕获
*/
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
//错误显示页面
public static final String viewName = "common/error/error";
/**
* 是否是ajax请求
*/
public static boolean isAjax(HttpServletRequest httpRequest) {
return (httpRequest.getHeader("X-Requested-With") != null
&& "XMLHttpRequest"
.equals(httpRequest.getHeader("X-Requested-With").toString()));
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingServletRequestParameterException.class)
public String handleMissingServletRequestParameterException(MissingServletRequestParameterException e, Model model) {
log.error("缺少请求参数", e);
String message = "【缺少请求参数】" + e.getMessage();
model.addAttribute("message", message);
model.addAttribute("code", 400);
return viewName;
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class)
public String handleHttpMessageNotReadableException(HttpMessageNotReadableException e, Model model) {
log.error("参数解析失败", e);
String message = "【参数解析失败】" + e.getMessage();
model.addAttribute("message", message);
model.addAttribute("code", 400);
return viewName;
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e, Model model) {
log.error("参数验证失败", e);
BindingResult result = e.getBindingResult();
FieldError error = result.getFieldError();
String field = error.getField();
String code = error.getDefaultMessage();
String message = "【参数验证失败】" + String.format("%s:%s", field, code);
model.addAttribute("message", message);
model.addAttribute("code", 400);
return viewName;
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(BindException.class)
public String handleBindException(BindException e, Model model) {
log.error("参数绑定失败", e);
BindingResult result = e.getBindingResult();
FieldError error = result.getFieldError();
String field = error.getField();
String code = error.getDefaultMessage();
String message = "【参数绑定失败】" + String.format("%s:%s", field, code);
model.addAttribute("message", message);
model.addAttribute("code", 400);
return viewName;
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(ConstraintViolationException.class)
public String handleServiceException(ConstraintViolationException e, Model model) {
log.error("参数验证失败", e);
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
ConstraintViolation<?> violation = violations.iterator().next();
String message = "【参数验证失败】" + violation.getMessage();
model.addAttribute("message", message);
model.addAttribute("code", 400);
return viewName;
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(ValidationException.class)
public String handleValidationException(ValidationException e, Model model) {
log.error("参数验证失败", e);
String message = "【参数验证失败】" + e.getMessage();
model.addAttribute("message", message);
model.addAttribute("code", 400);
return viewName;
}
/**
* 404 - Not Found
*/
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(NoHandlerFoundException.class)
public String noHandlerFoundException(NoHandlerFoundException e, Model model) {
log.error("Not Found", e);
String message = "【页面不存在】" + e.getMessage();
model.addAttribute("message", message);
model.addAttribute("code", 404);
return viewName;
}
/**
* 405 - Method Not Allowed
*/
@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public String handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e, Model model) {
log.error("不支持当前请求方法", e);
String message = "【不支持当前请求方法】" + e.getMessage();
model.addAttribute("message", message);
model.addAttribute("code", 405);
return viewName;
}
/**
* 415 - Unsupported Media Type
*/
@ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE)
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
public String handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e, Model model) {
log.error("不支持当前媒体类型", e);
String message = "【不支持当前媒体类型】" + e.getMessage();
model.addAttribute("message", message);
model.addAttribute("code", 415);
return viewName;
}
/**
* 统一异常处理
*
* @param response
* @param e
* @return
*/
@ExceptionHandler(MyBusinessException.class)
@ResponseBody
public JsonResult processApiException(HttpServletResponse response,
MyBusinessException e) {
JsonResult result = new JsonResult(0, e.getMessage());
response.setStatus(200);
response.setContentType("application/json;charset=UTF-8");
log.error("业务异常,提示前端操作不合法", e.getMessage(), e);
return result;
}
/**
* 获取其它异常。包括500
*
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest request,
HttpServletResponse response,
Exception e, Model model) throws IOException {
e.printStackTrace();
if
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【酒店管理系统】 酒店管理系统是一种用于帮助酒店管理和运营的软件系统。这种系统通常涵盖多个方面,包括客房预订、前台管理、客户关系管理、财务管理、员工管理、库存管理、报告和分析等。通过使用酒店管理系统,酒店可以更高效地管理他们的业务,提高客户满意度,优化运营流程,并实现更好的业绩。这种系统通常能够帮助酒店提高工作效率,降低成本,增加收入,并提供更好的服务质量。 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot酒店管理系统Hotel.zip (544个子文件)
icons.css 147KB
bootstrap.css 143KB
plugin.css 127KB
bootstrap.min.css 118KB
bootstrap.min.css 118KB
style.css 109KB
AdminLTE.css 109KB
dashboard.css 91KB
AdminLTE.min.css 89KB
AdminLTE-without-plugins.css 88KB
AdminLTE-without-plugins.min.css 72KB
froala_editor.pkgd.css 71KB
froala_editor.pkgd.min.css 60KB
loaders.css 55KB
animate.min.css 52KB
_all-skins.css 47KB
dashicons.min.css 45KB
_all-skins.min.css 41KB
royal.css 40KB
dark.css 40KB
gray.css 40KB
font-awesome.css 37KB
red.css 36KB
royal.min.css 35KB
gray.min.css 35KB
dark.min.css 35KB
froala_editor.css 34KB
red.min.css 32KB
font-awesome.min.css 30KB
froala_editor.min.css 29KB
bootstrap-theme.css 26KB
login.min.css 25KB
bootstrap-theme.min.css 23KB
pretty-checkbox.css 22KB
pretty-checkbox.min.css 19KB
AdminLTE-bootstrap-social.css 15KB
default.css 15KB
layer.css 14KB
AdminLTE-bootstrap-social.min.css 12KB
froala_style.css 9KB
image_manager.css 8KB
froala_style.min.css 8KB
image_manager.min.css 7KB
buttons.min.css 6KB
bootstrapStyle.css 6KB
highlight.css 5KB
layer.css 5KB
video.css 5KB
image.css 5KB
jquery.toast.min.css 4KB
video.min.css 4KB
table.css 4KB
image.min.css 4KB
colors.css 4KB
style.css 3KB
table.min.css 3KB
colors.min.css 3KB
loader.css 3KB
AdminLTE-select2.css 3KB
file.css 3KB
code_view.css 3KB
AdminLTE-select2.min.css 3KB
file.min.css 2KB
code_view.min.css 2KB
pace.css 2KB
pace.min.css 2KB
spell_checker.css 2KB
quick_insert.css 2KB
spell_checker.min.css 1KB
help.css 1KB
quick_insert.min.css 1KB
char_counter.css 1KB
embedly.css 1KB
special_characters.css 1KB
font_awesome.css 1KB
help.min.css 1KB
special_characters.min.css 1KB
char_counter.min.css 1KB
embedly.min.css 1KB
font_awesome.min.css 1KB
emoticons.css 897B
draggable.css 868B
emoticons.min.css 758B
image_tui.css 748B
bootstrapValidator.css 700B
bootstrapValidator.min.css 694B
line_breaker.css 681B
draggable.min.css 663B
image_tui.min.css 612B
line_breaker.min.css 574B
fullscreen.css 566B
fullscreen.min.css 489B
iconsmind.eot 1.12MB
simple-line-icons.eot 606KB
fontawesome-webfont.eot 162KB
glyphicons-halflings-regular.eot 20KB
loader.gif 269KB
loading.gif 8KB
loading-0.gif 6KB
loading-2.gif 2KB
共 544 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
枫蜜柚子茶
- 粉丝: 7545
- 资源: 5155
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功