我有一个通用的Java类型,如下所示:
class Response<D> {
List<D> data;
}
并希望创建类似于RAML 1.0(我是新手)的东西。
我的第一个方法是
types:
Response:
type: object
properties:
data: object[]
并在使用它时
body:
type: Response
properties:
data: MyDataType[]
从API-Workbench我总是得到“从Response继承的非法覆盖属性数据”。
另一个想法是使用repeat
:
types:
Response:
type: object
properties:
data: object
repeat: true
和分别
body:
type: Response
properties:
data: MyDataType
repeat: true
现在非法覆盖已经消失,但在API-Console中我现在得到一个“Uncaught TypeError”。
怎么解决?或者我需要一种完全不同的方法?任何的想法?
据我所知,Response
正在抽象不同类型的数据,但格式相似。一种方法是使用resourceTypes
抽象响应中的相似性,并在types
中定义您的具体数据。
#%RAML 1.0
title: New API
version: v1
baseUri: http://api.samplehost.com
mediaType: application/json
types:
User:
usage: A user in the system
properties:
firstname:
required: true
lastname:
required: true
ArticleId:
usage: An id of any article in the system
type: number
Article:
usage: Pattern for any article in the system
properties:
id:
type: ArticleId
required: true
created:
type: date
required: true
#######################################
# the following captures the similarity:
#######################################
resourceTypes:
collection:
get:
responses:
200:
body:
properties:
data: <<typename>>[]
###############
# API:
###############
/user:
description: All the users
type:
collection:
typename: User
/article:
description: All the articles
type:
collection:
typename: Article
我在解决此问题时看到以下选项:
List<MyDataType>
,并修改生成的输出。例如。从第1点使用相同的raml-java-parser。type{}
或外部类型可能需要包含的事实。也许this answer link有助于此。我在20分钟前对RAML一无所知,所以不要把它当作一个完整的答案而是快速猜测。
你说“和使用它时”:body:type:响应属性:data:MyDataType []
您已经在上面定义了“响应”类型,将“data”属性设置为“object []”。 “MyDataType”来自哪里?只需删除“属性”,只需要“类型:响应。然后错误就会消失。 也许您希望您的响应类型具有“任何[]”。我不知道你要做什么。也许定义另一种继承你的Response类型的类型。