声明式API

这是一种快速定义接口的写法,将传统的Controller变成了一个interface,同时对框架进行了各种增强,使得在没有Controller的情况下依然不会丢失Controller的作用。

声明一个接口

创建一个interface,在里面用抽象方法声明接口

public interface TestApi {

    /**
     * get请求示例
     * http://127.0.0.1:8080/selectList?name=张三&names=王五&names=赵六
     * @param expVO
     * @return
     */
    List<ExpVO> selectList(ExpVO expVO);
}

演示效果如下

假设现在有一个 Service,bean 名称为 aService,现在需要通过 MarsApi 来调用 aService 里面的 selectList 方法

@MarsApi(refBean="aService")
public interface TestApi {

    返回类型 selectList(ExpVO expVO);
}

当我们请求这个接口的时候,他会自动调用 aService 里面的 selectList 方法,并将返回值转成 json 返回。

如果我想在这个 API 里面 调用 bService 里的方法咋办?

@MarsApi(refBean="aService")
public interface TestApi {

    // 这个注解可以覆盖类上面的 refBean
    @MarsReference(beanName = "bService")
    返回类型 selectList(ExpVO expVO);
}

我不想把 API 里的方法名称 写的跟 Service 一样咋办?

@MarsApi(refBean="aService")
public interface TestApi {

    @MarsReference(refName = "要调用的 service 的方法名")
    返回类型 selectList(ExpVO expVO);
}

我可以不调用方法,只返回 Service 里面的一个属性值吗?

@MarsApi(refBean="aService")
public interface TestApi {

    @MarsReference(refName = "要调用的属性名", refType = RefType.PROPERTY)
    返回类型 selectList(ExpVO expVO);
}

假如你不太适应这种写法

没关系,我们兼容常规的 Controller 写法

@MarsApi
public class DemoController {

    @MarsWrite("userInfoServiceImpl")
    private UserInfoService userInfoService;

    public String demo(UserInfoDTO userInfoDTO, HttpMarsRequest request){
        return "";
    }
}

@RequestMethod注解

API的请求方式默认支持GET,POST,PUT,DELETE,如果想限制只支持某一种,可以在interface里面的方法上加上@RequestMethod注解

  • 如果限制只支持一种:@RequestMethod(ReqMethod.POST)
  • 如果限制多种:@RequestMethod({ReqMethod.POST, ReqMethod.PUT, ReqMethod.DELETE})

注意:目前接口只受理:GET,POST,PUT,DELETE 四种请求,其他的请求可以被服务收到,也会响应200,但是接口不受理

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

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

打印请求响应日志

在API的方法上加上MarsLog注解 即可打印,如下图所示:

@MarsApi(refBean="expApiService")
public interface ExpApi {

    @MarsLog
    List<ExpVO> expGetRequest(ExpVO expVO);
}

注意事项

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

results matching ""

    No results matching ""