4.2. 服务配置

Service 中可以通过 REST API 访问的方法需要写在配置文件中。这些配置文件需要通过 web 或者 portal 模块的 cuba.rest.servicesConfig 应用程序属性来指定,比如在 web-app.properties 文件中:

cuba.rest.servicesConfig = +com/company/myapp/rest-services.xml

rest-services.xml 文件需要放在 web 或者 portal 模块的根目录(比如 com.company.myapp)。文件内容格式是由 rest-services-v2.xsd shema 来定义,示例:

<?xml version="1.0" encoding="UTF-8"?>
<services xmlns="http://schemas.haulmont.com/cuba/rest-services-v2.xsd">
    <service name="myapp_SomeService">
        <method name="sum">
            <param name="number1"/>
            <param name="number2"/>
        </method>
        <method name="emptyMethod"/>
        <method name="overloadedMethod">
            <param name="intParam" type="int"/>
        </method>
        <method name="overloadedMethod">
            <param name="stringParam" type="java.lang.String"/>
        </method>
    </service>
</services>

如果服务没有重载带有相同数量参数的方法的话,方法参数的类型可以省略。否则,参数类型必须要显式定义。

如果参数类型是原始数据类型的话,配置文件中可以直接用数据类型的名称( intdouble 等):

<param name="intParam" type="int"/>

如果参数类型是对象或者实体,则需要用完全限定名称(包含路径和类名)作为参数类型:

<param name="stringParam" type="java.lang.String"/>
<param name="entityParam" type="com.company.entity.Order"/>

如果是实体集合或者 POJO 集合,则使用集合类型:

<param name="entitiesCollectionParam" type="java.util.List"/>

关于配置和调用服务的示例可以参考 调用服务方法(GET)调用服务方法(POST) 章节。

如果某些服务的方法需要在 匿名访问 被禁用的情况下进行无认证访问,那么可以在服务配置文件中给这个方法单独添加 anonymousAllowed="true" 属性:

<?xml version="1.0" encoding="UTF-8"?>
<services xmlns="http://schemas.haulmont.com/cuba/rest-services-v2.xsd">
    <service name="myapp_SomeService">
        <method name="sum" anonymousAllowed="true">
            <param name="number1"/>
            <param name="number2"/>
        </method>
    </service>
</services>