您的位置:首页 > 编程语言 > Java开发

SpringMVC拦截器返回值不能自定义的解决办法

2017-01-04 16:27 465 查看
@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,这样的话,前端好处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc