1. 程式人生 > >(六)自定義結果返回

(六)自定義結果返回

本篇介紹如何改變JSON輸出策略以及改變返回結果欄位名

改變json輸出策略

預設使用阿里的fastjson進行json輸出

JSON.toJSONString(obj)

如果要更換輸出策略,操作方式如下:

@Override
protected void initApiConfig(ApiConfig apiConfig) {
    ...
    // 自定義json格式輸出,將null字串變成""
    apiConfig.setJsonResultSerializer(new JsonResultSerializer(){
        @Override
        public String serialize(Object obj) {
            return
JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty); } }); ... }

上面示例是將null字串變成”“,如果是給安卓app提供介面,這個會很管用。

改變json格式

easyopen預設的返回類是ApiResult,解析成json格式為:

{
    "code": "0",
    "msg": "",
    "data": {...}
}

我們也可以自定義返回結果,比如我們要返回這樣的json:

{
    "errCode":"0",
    "errMsg":"",
    "body":{...}
}
  • 首先,新建結果類,實現com.gitee.easyopen.Result介面:
import com.gitee.easyopen.Result;

public class MyResult implements Result {
    private static final long serialVersionUID = -6618981510574135069L;

    private String errCode;
    private String errMsg;
    private
String body; @Override public void setCode(Object code) { this.setErrCode(String.valueOf(code)); } @Override public void setMsg(String msg) { this.setErrMsg(msg); } @Override public void setData(Object data) { this.setBody(String.valueOf(data)); } public String getErrCode() { return errCode; } public void setErrCode(String errCode) { this.errCode = errCode; } public String getErrMsg() { return errMsg; } public void setErrMsg(String errMsg) { this.errMsg = errMsg; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } }

MyResult類可定義自己想要的欄位名字,實現Result介面對應的方法即可

  • 然後,新建一個結果生成器,實現ResultCreator介面:
import com.gitee.easyopen.Result;
import com.gitee.easyopen.ResultCreator;

public class MyResultCreator implements ResultCreator {

    @Override
    public Result createResult(Object returnObj) {
        MyResult ret = new MyResult();
        ret.setCode(0);
        ret.setData(returnObj);
        return ret;
    }

    @Override
    public Result createErrorResult(Object code, String errorMsg, Object data) {
        MyResult ret = new MyResult();
        ret.setCode(code);
        ret.setMsg(errorMsg);
        ret.setData(data);
        return ret;
    }

}

ResultCreator介面定義兩個方法,createResult是返回正確內容的方法,createErrorResult是返回錯誤時候的方法。
分別實現它們,用我們剛才新建的MyResult類。

  • 最後,配置結果生成器,在initApiConfig方法中配置:
@Controller
@RequestMapping("/project/api")
public class IndexController extends ApiController {

    @Override
    protected void initApiConfig(ApiConfig apiConfig) {  

        // 配置結果生成器
        apiConfig.setResultCreator(new MyResultCreator()); 
        省略其它程式碼...    
    }

}

呼叫apiConfig.setResultCreator(new MyResultCreator());進行配置