(六)カスタム結果の戻り


この記事では、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インタフェースは2つのメソッドを定義し、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());構成