声明式API

  • 这个Service直接调用DAO即可,刚才的interface可以看做是Controller
  • 需要加上@MarsBean注解,同时在注解里设置bean的名称,如果不设置默认为该类首字母小写
  • 这个类不一定必须实现上面的interface,只要保证里面的方法跟上面的interface里一致即可,也就是说这句不是必须的【implements ExpApi】,之所以写这句,是为了快速生成一模一样的方法
  1. public class ExpApiService implements ExpApi {
  2. @Override
  3. public List<ExpVO> expGetRequest(ExpVO expVO) {
  4. // 打印接收到的参数,看是否接收成功
  5. System.out.println(expVO.getName());
  6. System.out.println(JSON.toJSONString(expVO.getNames()));
  7. // 返回数据
  8. return getExpResultData();
  9. }
  10. }
  • 在@MarsApi注解里设置属性refBean,将其设置为Service的bean名称
  • 经过这个设置,这个API才知道具体要引用哪个实现
  • 上面的声明方式,虽然清晰,但是有一定的局限性。
  • 那就是,在@MarsApi注解里设置了refBean属性,这就导致这个interface里的api必须都出自refBean指向的那个bean,否则会引用不到。
  • 这样一来就会出现一些局限,所以我们还提供了另一个注解@MarsReference
  • @MarsReference注解的用法如下,【注意看注释,和双引号里的汉字哦】
  1. /**
  2. * 跟上面第一步一样,正常声明一个接口
  3. */
  4. @MarsApi(refBean = "这里还是可以引用bean")
  5. /**
  6. * get请求示例
  7. * http://127.0.0.1:8080/expGetRequest?name=张三&names=王五&names=赵六
  8. * @param expVO
  9. * @return
  10. */
  11. @MarsReference(beanName = "这里的规则,请看下面第一点",refName = "这里的规则,请看下面第二点",refType = RefType.METHOD)
  12. List<ExpVO> expGetRequest(ExpVO expVO);
  1. beanName属性: 这里也可以引用一个bean,如果这里引用了就以这个为主,如果这里没引用就以interface上的全局为主
  2. refName属性: 要引用的资源,可以是方法名也可以是属性名,如果不设置,默认为这个方法的名称
  3. refType属性: 用来标记 refName里设置的是方法名还是属性名,默认为方法名

除了上面的声明式玩法,我们还支持传统的Controller

  • 这种写法下,@MarsApi里不需要设置refBean属性
  • 将Service注入进来,然后在方法里调用即可

@RequestMethod注解

前端访问API接口的方式如下:

  1. http://ip:端口号,或者域名/Api里的方法名称

打印请求响应日志

注意事项

  1. 接口的参数列表支持后面括号里的任意一种或者多种并存【自定义对象,Map,HttpMarsRequest, HttpMarsResponse】