
com.digitalchina.platform.security.utils.Result Maven / Gradle / Ivy
package com.digitalchina.platform.security.utils;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.util.WebUtils;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
/**
* http 接口返回值封装类
*
* status 定义于 cn.dceast.platform.common.result.Result.Status
* message 消息,存放返回给用户的提示消息
* result 结果,返回给客户端的结果,可以是任何数据结构
* code 代码,需要精确定义错误代码时使用
*
* 客户端收到返回结果后的处理逻辑:
*
* 先判断status是否为cn.dceast.platform.common.result.Result.Status#OK,如果不是OK状态,表示服务器端发生错误,给用户message提示。
* 如果是OK状态,且需要服务器端返回结果的,取result字段,根据接口约定,解析返回结果。
* 如果服务器端定义的接口有精确的返回code定义,在发生错误时,根据具体code来判断错误原因来做不同的处理。
*/
public class Result {
public static final String I18NCOOKIE_NAME = "i18n";
/**
* 返回状态
*/
public enum Status {
OK, //正确返回
ERROR //错误返回
}
private static SerializeConfig config = new SerializeConfig();
private String status;
private String message;
private Object result;
private Integer code;
static {
}
public Result(int code, String status, String message, Object result) {
super();
this.status = status;
this.message = message;
if (result == null) {
this.result = "";
} else {
this.result = result;
}
this.code = code;
}
public Result(int code, String status, String message) {
super();
this.status = status;
this.message = message;
this.code = code;
}
public Result() {
super();
}
public static String error(Integer code, Object result) {
String msg = ApplicationConextUtil.getAc().getMessage(code + "", null,
getLocale());
return new Result(code, Status.ERROR.name(), msg, result).toString();
}
public static String error(Integer code) {
String msg = ApplicationConextUtil.getAc().getMessage(code + "", null,
getLocale());
return new Result(code, Status.ERROR.name(), msg, null).toString();
}
public static String error(String errMsg, Object result) {
return new Result(1000, Status.ERROR.name(), errMsg, result).toString();
}
public static String ok(Integer code, Object result) {
String msg = ApplicationConextUtil.getAc().getMessage(code + "", null,
getLocale());
return new Result(code, Status.OK.name(), msg, result).toString();
}
public static String ok(Integer code) {
String msg = ApplicationConextUtil.getAc().getMessage(code + "", null,
getLocale());
return new Result(code, Status.OK.name(), msg, null).toString();
}
public static String ok(String msg, Object result) {
return new Result(0, Status.OK.name(), msg, result).toString();
}
public static String ok(Object result) {
// String msg = ApplicationConextUtil.getAc().getMessage(0 + "", null, getLocale());
return new Result(0, Status.OK.name(), "", result).toString();
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getResult() {
return result;
}
public void setResult(Object result) {
this.result = result;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
private static Locale getLocale() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
Locale locale;
Cookie cookie = WebUtils.getCookie(request, I18NCOOKIE_NAME);
if (cookie != null) {
locale = StringUtils.parseLocaleString(cookie.getValue());
if (locale != null) {
return locale;
}
}
locale = (Locale) request.getLocale();
if (locale != null) {
return locale;
}
return locale;
}
@Override
public String toString() {
return JSONObject.toJSONString(this, config,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteDateUseDateFormat,
SerializerFeature.DisableCircularReferenceDetect);
}
public Map toMap() {
Map map = new HashMap();
if (status != null) {
map.put("status", status);
}
if (message != null) {
map.put("message", message);
}
if (result != null) {
map.put("result", result);
}
if (code != null) {
map.put("code", code);
}
return map;
}
/**
* 解析result
*
* @param result String
* @return Result
*/
public static Result parseJsonResult(String result) {
JSONObject resultObj = (JSONObject) JSONObject.parse(result);
Integer code = resultObj.getInteger("code");
String status = resultObj.getString("status");
String message = resultObj.getString("message");
Object result1 = resultObj.get("result");
return new Result(code, status, message, result1);
}
}