(六)カスタム結果の戻り
6796 ワード
この記事では、JSON出力ポリシーを変更し、戻り結果フィールド名を変更する方法について説明します.
デフォルトではアリのfastjsonを使用してjson出力を行います
出力ポリシーを交換する場合は、次のように操作します.
上記の例ではnull文字列を「」に変更し、アンドロイドappにインタフェースを提供する場合に便利です.
easyopenのデフォルトの戻りクラスはApiResultで、json形式に解析されます.
このようなjsonを返すなど、戻り結果をカスタマイズすることもできます.まず、結果クラスを新規作成するcomを実現する.gitee.easyopen.Resultインタフェース:
MyResultクラスは自分が望むフィールド名を定義し、Resultインタフェースに対応する方法を実現すればよいその後、ResultCreatorインタフェースを実装する結果ジェネレータを新規作成します:
ResultCreatorインタフェースは2つのメソッドを定義し、createResultは正しい内容を返すメソッドであり、createErrorResultはエラーを返すメソッドである.それぞれ実現して、さっき新しく作ったMyResultクラスを使います.最後に、結果生成器を構成し、initApiConfigメソッドで構成する:
apiConfigを呼び出す.setResultCreator(new MyResultCreator());構成
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":{...}
}
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インタフェースに対応する方法を実現すればよい
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クラスを使います.
@Controller
@RequestMapping("/project/api")
public class IndexController extends ApiController {
@Override
protected void initApiConfig(ApiConfig apiConfig) {
//
apiConfig.setResultCreator(new MyResultCreator());
...
}
}
apiConfigを呼び出す.setResultCreator(new MyResultCreator());構成