常见问题

服务请求(x)超时

核对客户端时间跟服务器时间,误差不能超过3秒。调大误差变为5秒,使用apiConfig.setTimeoutSeconds(5);

最好是做服务器时间同步

在业务方法中如何获取request对象?

ApiContext.getRequest()

SDK加密传输json解析错误

如果使用了shiro等权限框架,注意配置url,IndexController里面有多个url,除了api,还有api/doc,api/ssl等,这些url都需要允许访问 可以使用api*通配符来允许访问。

如何获取当前调用者的appKey?

ApiContext.getApiParam().fatchAppKey()

直接返回方法中的结果

  1. @Api(name = "xxx"
  2. , wrapResult = false // 对结果不进行包装,直接将ApiResult转成json形式返回
  3. )
  4. public ApiResult fun(GoodsParam param) {
  5. ApiResult apiResult = new ApiResult();
  6. apiResult.setCode(200);
  7. apiResult.setMsg("xxx");
  8. return apiResult;
  9. }

拦截器中使用spring注入

// 第一步

  1. @Component // 加这个注解
  2. public class MyInterceptor extends ApiInterceptorAdapter {
  3. ...
  4. }

// 第二步

  1. @Controller
  2. @RequestMapping("/api")
  3. public class IndexController extends ApiController {
  4. @Autowired
  5. private MyInterceptor myInterceptor;
  6. @Override
  7. protected void initApiConfig(ApiConfig apiConfig) {
  8. ...
  9. apiConfig.setInterceptors(new ApiInterceptor[]{myInterceptor});
  10. ...
  11. }
  12. }