自定义结果返回

改变json输出策略

默认使用阿里的fastjson进行json输出

  1. JSON.toJSONString(obj)

如果要更换输出策略,操作方式如下:

  1. @Override
  2. protected void initApiConfig(ApiConfig apiConfig) {
  3. ...
  4. // 自定义json格式输出,将null字符串变成""
  5. apiConfig.setJsonResultSerializer(new JsonResultSerializer(){
  6. @Override
  7. public String serialize(Object obj) {
  8. return JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty);
  9. }
  10. });
  11. ...
  12. }

上面示例是将null字符串变成"",如果是给安卓app提供接口,这个会很管用。

改变json格式

easyopen默认的返回类是ApiResult,解析成json格式为:

  1. {
  2. "code": "0",
  3. "msg": "",
  4. "data": {...}
  5. }

我们也可以自定义返回结果,比如我们要返回这样的json:

  1. {
  2. "errCode":"0",
  3. "errMsg":"",
  4. "body":{...}
  5. }
  • 首先,新建结果类,实现com.gitee.easyopen.Result接口:

    1. import com.gitee.easyopen.Result;
    2. public class MyResult implements Result {
    3. private static final long serialVersionUID = -6618981510574135069L;
    4. private String errCode;
    5. private String errMsg;
    6. private String body;
    7. @Override
    8. public void setCode(Object code) {
    9. this.setErrCode(String.valueOf(code));
    10. }
    11. @Override
    12. public void setMsg(String msg) {
    13. this.setErrMsg(msg);
    14. }
    15. @Override
    16. public void setData(Object data) {
    17. this.setBody(String.valueOf(data));
    18. }
    19. public String getErrCode() {
    20. return errCode;
    21. }
    22. public void setErrCode(String errCode) {
    23. this.errCode = errCode;
    24. }
    25. public String getErrMsg() {
    26. return errMsg;
    27. }
    28. public void setErrMsg(String errMsg) {
    29. this.errMsg = errMsg;
    30. }
    31. public String getBody() {
    32. return body;
    33. }
    34. public void setBody(String body) {
    35. this.body = body;
    36. }
    37. }

MyResult类可定义自己想要的字段名字,实现Result接口对应的方法即可

  • 然后,新建一个结果生成器,实现ResultCreator接口:

    1. import com.gitee.easyopen.Result;
    2. import com.gitee.easyopen.ResultCreator;
    3. public class MyResultCreator implements ResultCreator {
    4. @Override
    5. public Result createResult(Object returnObj) {
    6. MyResult ret = new MyResult();
    7. ret.setCode(0);
    8. ret.setData(returnObj);
    9. return ret;
    10. }
    11. @Override
    12. public Result createErrorResult(Object code, String errorMsg, Object data) {
    13. MyResult ret = new MyResult();
    14. ret.setCode(code);
    15. ret.setMsg(errorMsg);
    16. ret.setData(data);
    17. return ret;
    18. }
    19. }

ResultCreator接口定义两个方法,createResult是返回正确内容的方法,createErrorResult是返回错误时候的方法。 分别实现它们,用我们刚才新建的MyResult类。

  • 最后,配置结果生成器,在initApiConfig方法中配置:
    1. @Controller
    2. @RequestMapping("/project/api")
    3. public class IndexController extends ApiController {
    4. @Override
    5. protected void initApiConfig(ApiConfig apiConfig) {
    6. // 配置结果生成器
    7. apiConfig.setResultCreator(new MyResultCreator());
    8. 省略其它代码...
    9. }
    10. }

调用apiConfig.setResultCreator(new MyResultCreator());进行配置