Martian 框架发布了 3.0.29 版本

328 阅读2分钟

Martian 原名叫 Mars-Java,为了避免跟 java 商标产生冲突,所以改名了。

先说点题外话

在遭受了 100 多条评论后,我认识到了一些问题,其中最大的就是 接口受理的请求方式太少了,在某些场景下不够用。

首先呢,我得在解释一次:Martian 是可以接收任意 http 请求的,只不过 api 接口只受理这么几种,我的限制不是做在服务上的,而是做在接口上的,所以呢 ajax 发出的那个 option 是可以正常接收并响应 200 的,完全没问题。

希望大家以后不要在误解咯。

本次更新的点

  1. 接口受理的请求方式更多了,新增了 PUT 和 DELETE,也就是目前为止,接口可以受理 GET,POET,DELETE,PUT 四种请求方式了, [为什么不全支持,暂时不予解释] 。

  2. API 新增 @MarsReference 注解

新增的 PUT 和 DELETE 怎么用

很简单,跟之前的 GET,POST 一样设置,只不过 ReqMethod 里面多了两个选项.

@RequestMethod(ReqMethod.PUT)
String expUploadRequest(ExpVO expVO)

@MarsReference 注解是啥

我们目前的声明式 API,采用的如下机制:

创建 interface -> 创建实现类 -> 在 interface 上加上 MarsApi 注解

这样会出现一些局限,那就是一个 interface 只能对应一个实现类,玩起来就像是 service 的父接口一样, 为了改善这个情况,我提供了一个新的注解 @MarsReference

这个注解怎么用呢?请看下面示例,注意看注释和双引号里的汉字

/**
 * 老套路,正常声明一个接口
 */
@MarsApi(refBean = "这里还是可以引用 bean")
public interface ExpApi {

    /**
     * get 请求示例
     * http://127.0.0.1:8080/expGetRequest?name=张三&names=王五&names=赵六
     * @param expVO
     * @return
     */
    @MarsReference(beanName = "这里的规则,请看下面第一点",refName = "这里的规则,请看下面第二点",refType = RefType.METHOD)
    List<ExpVO> expGetRequest(ExpVO expVO);

}
  1. beanName 属性: 这里也可以引用一个 bean,如果这里引用了就以这个为主,如果这里没引用就以 interface 上的全局为主
  2. refName 属性: 要引用的资源,可以是方法名也可以是属性名,如果不设置,默认为这个方法的名称
  3. refType 属性: 用来标记 refName 里设置的是方法名还是属性名,默认为方法名

从这一刻开始,interface 和实现类彻底解耦了,他们不再是父子关系(父子关系那一套也一样兼容),一个 interface 可以引用多个 bean 里面的方法或者属性,在一定程度上增加了 interface 的灵活性。

Martian官网:www.mars-framework.com