exception包
public interface ICustomizeErrorCode {
String getMessage();
Integer getCode();
}
//用枚举类型限制错误的类型
public enum CustomizeErrorCode implements ICustomizeErrorCode {
QUESTION_NOT_FOUND(2001, "你找到问题不在了,要不要换个试试?"),
TARGET_PARAM_NOT_FOUND(2002, "未选中任何问题或评论进行回复"),
NO_LOGIN(2003, "当前操作需要登录,请登陆后重试"),
SYS_ERROR(2004, "服务冒烟了,要不然你稍后再试试!!!"),
TYPE_PARAM_WRONG(2005, "评论类型错误或不存在"),
COMMENT_NOT_FOUND(2006, "回复的评论不存在了,要不要换个试试?"),
CONTENT_IS_EMPTY(2007, "输入内容不能为空"),
READ_NOTIFICATION_FAIL(2008, "兄弟你这是读别人的信息呢?"),
NOTIFICATION_NOT_FOUND(2009, "消息莫非是不翼而飞了?"),
FILE_UPLOAD_FAIL(2010, "图片上传失败"),
INVALID_INPUT(2011, "非法输入"),
INVALID_OPERATION(2012, "兄弟,是不是走错房间了?"),
;
private String message;
private Integer code;
CustomizeErrorCode(Integer code, String message) {
this.message = message;
this.code = code;
}
@Override
public String getMessage() {
return message;
}
@Override
public Integer getCode() {
return code;
}
}
public class CustomizeException extends RuntimeException {
private String message;
private Integer code;
/**
* 构造器初始化属性
* @param errorCode 通过ICustomizeErrorCode这个接口和CustomizeErrorCode联系起来,因为后者实现了这个接口
*/
public CustomizeException(ICustomizeErrorCode errorCode){
this.message=errorCode.getMessage();
this.code=errorCode.getCode();
}
public String getMessage() {
return message;
}
public Integer getCode() {
return code;
}
}
error页面
<div>
<div class="jumbotron">
<h3 th:text="${message}"></h3>
<a href="/" role="button">回到主页</a>
</div>
</div>
ajax异步请求
function comment2target(targetId, type, content) {
if (!content) {
alert("不能回复空内容~~~");
return;
}
$.ajax({
type: "POST",
url: "/comment",
contentType: 'application/json',
data: JSON.stringify({
"parentId": targetId,
"content": content,
"type": type
}),
success: function (response) {
if (response.code == 200) {
// window.location.reload();
parent.location.reload();
} else {
if (response.code == 2003) {
let isAccepted = confirm(response.message);
if (isAccepted) {
window.open("https://github.com/login/oauth/authorize?client_id=c05a2ccc4a4995c1b2e2&redirect_uri=http://localhost:8080/callback&scope=user&state=1");
localStorage.setItem("closable","true");
localStorage.getItem("closable")
}
} else {
alert(response.message);
}
}
},
dataType: "json"
});
}
处理
如果错误是前端引起的,返回错误信息到前端,如果是其他,返回错误信息到error页面
/**
* 异常处理,返回相应的位置
*/
@ControllerAdvice
public class CustomizeExceptionHandler {
@ExceptionHandler(Exception.class)
ModelAndView handle(Throwable e, Model model, HttpServletRequest request, HttpServletResponse response) {
String contentType = request.getContentType();
//返回json
if ("application/json".equals(contentType)) {
ResultDTO resultDTO;
if (e instanceof CustomizeException) {
resultDTO = ResultDTO.errorOf((CustomizeException) e);
} else {
resultDTO = ResultDTO.errorOf(CustomizeErrorCode.SYS_ERROR);
}
try {
response.setContentType("application/json");
response.setStatus(200);
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
writer.write(JSON.toJSONString(resultDTO));
writer.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return null;
} else {
//返回错误页面
if (e instanceof CustomizeException) {
model.addAttribute("message", e.getMessage());
} else {
model.addAttribute("message", CustomizeErrorCode.SYS_ERROR.getMessage());
}
return new ModelAndView("error");
}
}
}