@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
int httpCode = xxx;
response.sendError(httpCode,"error message");
return false;
}
这样做的话,前端每次都只能拿到状态码,好像拿不到具体的错误内容。然后,我换了种方式。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestContent = getRequestBody(request);
log.debug("requestContent:{}", requestContent);
LoginParam param = map.fromJson(requestContent, LoginParam.class);
log.debug("param:{}", param);
if (StringUtils.isBlank(param.getCode())) {
returnErrorMessage(response, "请输入验证码");
return false;
}
//验证码是否验证通过
...
boolean validPass = isValidUser(request, param);
if (validPass) {
return true;
}
returnErrorMessage(response, "用户名或密码错误,请重新尝试。");
log.debug("Error");
return false;
}
private void returnErrorMessage(HttpServletResponse response, String errorMessage) throws IOException {
Result rst = new Result();
rst.setCode("0");
rst.setMessage(errorMessage);
response.setContentType("application/json");
//Get the printwriter object from response to write the required json object to the output stream
PrintWriter out = response.getWriter();
//Assuming your json object is **jsonObject**, perform the following, it will return your json object
ObjectMapper mapper = new ObjectMapper();
String jsonOfRST = "{\"result\":" + mapper.writeValueAsString(rst) + ",\"data\":null}";
out.print(jsonOfRST);
out.flush();
}
上面这种办法就是,不返回标准的HttpStatus401,而是改用200,这样的话,前端好处理。